*&---------------------------------------------------------------------*
*& Report  ZSOFTCOPY                                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& This program 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.                                      *
*&                                                                     *
*& This program 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 this program. If not, see <http://www.gnu.org/licenses/>.*
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&  Author:     Ruediger von Creytz     ruediger.creytz@globalbit.net  *
*&  Copyright:  globalBIT, LLC          http://www.globalbit.net       *
*&  Version:    20210302                                               *
*&                                                                     *
*&---------------------------------------------------------------------*

REPORT  zsoftcopy.


***required
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_TYPES                                  *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


  TYPE-POOLS:
  abap.

  TYPES:
  it_abapsource TYPE STANDARD TABLE OF abapsource,

  BEGIN OF st_abaptxt255,
    line(255) TYPE c,
  END OF st_abaptxt255,
  it_abaptxt255 TYPE STANDARD TABLE OF st_abaptxt255,

  BEGIN OF st_access,
    checked TYPE flag,
    ddtext TYPE string,
    sub TYPE n,
  END OF st_access,
  it_access TYPE STANDARD TABLE OF st_access,

  BEGIN OF st_attributes,
    descript TYPE string,
    space_after_descript TYPE flag,
    person_responsible TYPE as4user,
    person_responsible_text TYPE ad_namtext,
    author TYPE bname,
    author_text TYPE ad_namtext,
    date_created TYPE string,
    bname TYPE bname,
    name_text TYPE ad_namtext,
    date_last_changed TYPE string,
    time_last_changed TYPE string,
    date_last_generation TYPE string,
    time_last_generation TYPE string,
    devclass TYPE devclass,
    devclass_descr TYPE as4text,
    laiso TYPE laiso,
    sptxt TYPE sptxt,
    display_appview TYPE flag,
    appview TYPE string,
    is_bsp_appl TYPE flag,
    internal_name TYPE string,
    initial_bsp TYPE string,
    application_class TYPE string,
    theme TYPE string,
    stateful TYPE flag,
    supports_portal_integration TYPE flag,
    display_rfcenable TYPE flag,
    rfcenable TYPE flag,
    application_component TYPE akhkompo,
  END OF st_attributes,

  BEGIN OF st_component,
    component TYPE dlvunit,
    release TYPE saprelease,
    level TYPE num4,
    high_package TYPE patch,
    desc_text TYPE comp_desc,
  END OF st_component,
  it_component TYPE STANDARD TABLE OF st_component,

  BEGIN OF st_contflag_range,
    sign(1) TYPE c,
    option(2) TYPE c,
    low TYPE contflag,
    high TYPE contflag,
  END OF st_contflag_range,
  it_contflag_range TYPE STANDARD TABLE OF st_contflag_range,

  it_d021s TYPE STANDARD TABLE OF d021s,

  BEGIN OF st_data_type,
    domname TYPE domname,
    domdescr TYPE as4text,
    datatype TYPE datatype_d,
    datadescr TYPE val_text,
    dataleng TYPE ddleng,
    datadeci TYPE decimals,
    refkind TYPE typekind,
    reftype(1) TYPE c,
  END OF st_data_type,

  BEGIN OF st_definition_1,
    datatype TYPE datatype_d,
    datadescr TYPE string,
    dataleng TYPE ddleng,
    datadeci TYPE decimals,
    outputlen TYPE outputlen,
    convexit TYPE convexit,
    signflag TYPE signflag,
    lowercase TYPE lowercase,
  END OF st_definition_1,

  BEGIN OF st_definition_2,
    selmethod TYPE selmethod,
    texttab TYPE selmethtxt,
    dialogtype TYPE ddshdiatyp,
    hotkey TYPE ddshhotkey,
    selmexit TYPE ddshselext,
  END OF st_definition_2,

  BEGIN OF st_deliv_maint,
    display_cont TYPE flag,
    contflag TYPE contflag,
    contflag_text TYPE string,
    display_main TYPE flag,
    mainflag_text TYPE string,
    sqltab TYPE sqlappdtab,
  END OF st_deliv_maint,

  BEGIN OF st_dom_value,
    text TYPE val_text,
    value TYPE domvalue_l,
  END OF st_dom_value,
  it_dom_value TYPE STANDARD TABLE OF st_dom_value,

  BEGIN OF st_dynpro_function_new, "since version 4.01
    type(1) TYPE c,
    code TYPE tcode,
  END OF st_dynpro_function_new,

  BEGIN OF st_dynpro_function_old, "till version 4.00
    code(4) TYPE c,
    type(1) TYPE c,
  END OF st_dynpro_function_old,

  BEGIN OF st_dynpro_name,
    prog LIKE d020s-prog,
    dnum LIKE d020s-dnum,
  END OF st_dynpro_name,

  BEGIN OF st_dynpro_release,
    rel(1) TYPE c,
    dot(1) TYPE c,
    version(2) TYPE c,
  END OF st_dynpro_release,

  it_feld TYPE STANDARD TABLE OF feld,

  BEGIN OF st_feld_redef,
    dropdown TYPE string,
    fobl TYPE string,
  END OF st_feld_redef,
  it_feld_redef TYPE STANDARD TABLE OF st_feld_redef,

  BEGIN OF st_field_label,
    scrlen_s TYPE scrlen_s,
    scrtext_s TYPE scrtext_s,
    scrlen_m TYPE scrlen_m,
    scrtext_m TYPE scrtext_m,
    scrlen_l TYPE scrlen_l,
    scrtext_l TYPE scrtext_l,
    headlen TYPE headlen,
    reptext TYPE reptext,
  END OF st_field_label,

  BEGIN OF st_further_char,
    shlpname TYPE shlpname,
    shlpfield TYPE shlpfield,
    memoryid TYPE memoryid,
    deffdname TYPE deffdname,
    logflag TYPE logflag,
  END OF st_further_char,

  st_guid(32) TYPE c,
  it_guid TYPE STANDARD TABLE OF st_guid,

  BEGIN OF st_init_access,
    info1 TYPE string,
    info2 TYPE string,
    occurs(5) TYPE n,
    unknown TYPE flag,
  END OF st_init_access,

  BEGIN OF st_join_conditions,
    tabname_l TYPE tabname,
    fieldname_l TYPE fieldname,
    operator TYPE string,
    tabname_r TYPE tabname,
    fieldname_r TYPE fieldname,
  END OF st_join_conditions,
  it_join_conditions TYPE STANDARD TABLE OF st_join_conditions,

  BEGIN OF st_key,
    info TYPE string,
  END OF st_key,

  BEGIN OF st_last_logon,
    date TYPE sydatum,
    time TYPE syuzeit,
    date_now TYPE sydatum,
    time_now TYPE syuzeit,
  END OF st_last_logon,

  BEGIN OF st_line,
    line(255) TYPE c,
  END OF st_line,
  it_line TYPE STANDARD TABLE OF st_line,

  BEGIN OF st_line_type,
    info TYPE string,
    rowkind TYPE string,
    rowtype TYPE string,
    rowdescr TYPE string,
    datatype TYPE datatype_d,
    dataleng TYPE ddleng,
    datadeci TYPE decimals,
    reftype(1) TYPE c,
    refdescr TYPE string,
    range_ctyp TYPE string,
    ctdatatype TYPE datatype_d,
    ctleng TYPE ddleng,
    ctdecimals TYPE decimals,
  END OF st_line_type,

  BEGIN OF st_link,
    descript TYPE as4text,
    title TYPE string,
    href TYPE string,
    onclick TYPE string,
  END OF st_link,
  it_link TYPE STANDARD TABLE OF st_link,

  BEGIN OF st_mime,
    key(4096) TYPE c,
    name(4096) TYPE c,
    mimetype(128) TYPE c,
    mimetype_descript(64) TYPE c,
    objtype TYPE c,
    class(10) TYPE c,
    objid(32) TYPE c,
  END OF st_mime,
  it_mime TYPE STANDARD TABLE OF st_mime,

  BEGIN OF st_o2class_filter,
    re_class(10) TYPE c,
    prtn_class(10) TYPE c,
  END OF st_o2class_filter,
  it_o2class_filter TYPE STANDARD TABLE OF st_o2class_filter,

  BEGIN OF st_o2content_ascii,
    line TYPE sdok_sdat,
  END OF st_o2content_ascii,
  it_o2content_ascii TYPE STANDARD TABLE OF st_o2content_ascii,

  BEGIN OF st_o2content_binary,
    line TYPE sdok_sdatx,
  END OF st_o2content_binary,
  it_o2content_binary TYPE STANDARD TABLE OF st_o2content_binary,

  BEGIN OF st_o2file_info,
    file_size(12) TYPE n,
    binary_flg(1) TYPE c,
    first_line(12) TYPE n,
    last_line(12) TYPE n,
    file_name(255) TYPE c,
    mimetype(128) TYPE c,
    property(4) TYPE c,
  END OF st_o2file_info,
  it_o2file_info TYPE STANDARD TABLE OF st_o2file_info,

  BEGIN OF st_o2navigation,
    start(70) TYPE c,
    navrequest(30) TYPE c,
    target(70) TYPE c,
  END OF st_o2navigation,
  it_o2navigation TYPE STANDARD TABLE OF st_o2navigation,

  BEGIN OF st_o2pageattr,
    aliasname(30) TYPE c,
    pardecltyp(1) TYPE n,
    typtype(1) TYPE n,
    type TYPE rs38l_typ,
    text(60) TYPE c,
    pardecltyp_flag TYPE flag,
    typtype_txt TYPE string,
  END OF st_o2pageattr,
  it_o2pageattr TYPE STANDARD TABLE OF st_o2pageattr,

  BEGIN OF st_o2pageline,
    line TYPE char255,
  END OF st_o2pageline,
  it_o2pageline TYPE STANDARD TABLE OF st_o2pageline,

  BEGIN OF st_o2pagpars,
    applname(30) TYPE c,
    pagekey(70) TYPE c,
    compname(30) TYPE c,
    version TYPE r3state,
    pardecltyp(1) TYPE n,
    typtype(1) TYPE n,
    type(132) TYPE c,
    aliasname(30) TYPE c,
    parvalue(132) TYPE c,
    text(60) TYPE c,
    mark TYPE c,
  END OF st_o2pagpars,
  it_o2pagpars TYPE STANDARD TABLE OF st_o2pagpars,

  BEGIN OF st_o2relation,
    objtype(1) TYPE c,
    reio_id(32) TYPE c,
    re_class(10) TYPE c,
    prtn_id(32) TYPE c,
    prtn_class(10) TYPE c,
  END OF st_o2relation,
  it_o2relation TYPE STANDARD TABLE OF st_o2relation,

  BEGIN OF st_o2tagatt,
    attid(30) TYPE c,
    required TYPE flag,
    rtexpr TYPE flag,
    byref TYPE flag,
    typtype_txt TYPE string,
    type(132) TYPE c,
    defval(30) TYPE c,
    bindable TYPE flag,
    descript(60) TYPE c,
  END OF st_o2tagatt,
  it_o2tagatt TYPE STANDARD TABLE OF st_o2tagatt,

  BEGIN OF st_pack_intf,
    intf_name TYPE scomifnam,
    forsys TYPE as4text,
    descript TYPE as4text,
  END OF st_pack_intf,
  it_pack_intf TYPE STANDARD TABLE OF st_pack_intf,

  BEGIN OF st_pack_perm,
    pack_name TYPE packname,
    intf_name TYPE scomifnam,
    err_sever TYPE as4text,
  END OF st_pack_perm,
  it_pack_perm TYPE STANDARD TABLE OF st_pack_perm,

  BEGIN OF st_pack_sub,
    devclass TYPE packname,
    ctext TYPE as4text,
  END OF st_pack_sub,
  it_pack_sub TYPE STANDARD TABLE OF st_pack_sub,

  BEGIN OF st_parameter,
    name TYPE string,
    typing TYPE string,
    structure TYPE string,
    defvalue TYPE string,
    optional TYPE flag,
    passvalue TYPE flag,
    stext TYPE string,
    ltext TYPE string,
    ltext_onclick TYPE string,
    ltext_doku_obj TYPE doku_obj,
  END OF st_parameter,
  it_parameter TYPE STANDARD TABLE OF st_parameter,

  BEGIN OF st_prop,
    name(5) TYPE c,
    value(40) TYPE c,
  END OF st_prop,
  it_prop TYPE STANDARD TABLE OF st_prop,

  BEGIN OF st_properties,
    superclass TYPE seoclsref,
    check_model_inh TYPE seostatf1c,
    descript TYPE seodescr,
    creatable TYPE ddtext,
    clsfinal TYPE seofinal,
  END OF st_properties,

  BEGIN OF st_ref_seoalias,
    cpdname TYPE seocpdname,
    cmptype TYPE seocmptype,
    type TYPE string,
    refcmpname TYPE seocmpname,
    exposure TYPE string,
    owner TYPE seoclsname,
  END OF st_ref_seoalias,
  it_ref_seoalias TYPE STANDARD TABLE OF st_ref_seoalias,

  BEGIN OF st_ref_seoattrib,
    cpdname TYPE seocpdname,
    inherited TYPE flag,
    exposure TYPE string,
    check_model TYPE flag,
    decltype TYPE string,
    attrdonly TYPE seordonly,
    typtype TYPE string,
    type TYPE rs38l_typ,
    onclick TYPE string,
    typelink TYPE string,
    descript TYPE seodescr,
    attvalue TYPE seovalue,
    owner TYPE seoclsname,
  END OF st_ref_seoattrib,
  it_ref_seoattrib TYPE STANDARD TABLE OF st_ref_seoattrib,

  BEGIN OF st_ref_seoevent,
    cpdname TYPE seocpdname,
    inherited TYPE flag,
    type TYPE string,
    exposure TYPE string,
    check_model TYPE flag,
    descript TYPE seodescr,
    owner TYPE seoclsname,
  END OF st_ref_seoevent,
  it_ref_seoevent TYPE STANDARD TABLE OF st_ref_seoevent,

  BEGIN OF st_ref_seofriends,
    refclsname TYPE seoclsname,
    check_model TYPE boolean,
    descript TYPE seodescr,
  END OF st_ref_seofriends,
  it_ref_seofriends TYPE STANDARD TABLE OF st_ref_seofriends,

  BEGIN OF st_ref_seointerface,
    refclsname TYPE seoclsname,
    hierlevel TYPE i,
    inherited TYPE flag,
    impfinal TYPE flag,
    impabstrct TYPE flag,
    check_model TYPE flag,
    descript TYPE seodescr,
    owner TYPE seoclsname,
  END OF st_ref_seointerface,
  it_ref_seointerface TYPE STANDARD TABLE OF st_ref_seointerface,

  BEGIN OF st_ref_seomethod,
    cpdname TYPE seocpdname,
    inherited TYPE flag,
    active TYPE string,
    onclick TYPE string,
    redefin TYPE flag,
    type TYPE string,
    exposure TYPE string,
    check_model TYPE flag,
    methodtype TYPE string,
    descript TYPE seodescr,
    owner TYPE seoclsname,
  END OF st_ref_seomethod,
  it_ref_seomethod TYPE STANDARD TABLE OF st_ref_seomethod,

  BEGIN OF st_ref_seosignature,
    declaration TYPE string,
    parameter TYPE string,
    type TYPE string,
    descript TYPE string,
  END OF st_ref_seosignature,
  it_ref_seosignature TYPE STANDARD TABLE OF st_ref_seosignature,

  BEGIN OF st_ref_seotype,
    cpdname TYPE seocpdname,
    inherited TYPE flag,
    typtype TYPE string,
    type TYPE rs38l_typ,
    exposure TYPE string,
    check_model TYPE flag,
    onclick TYPE string,
    typelink TYPE string,
    descript TYPE seodescr,
    owner TYPE seoclsname,
  END OF st_ref_seotype,
  it_ref_seotype TYPE STANDARD TABLE OF st_ref_seotype,

  BEGIN OF st_seo_super_class,
    clsname TYPE seoclsname,
    hierlevel TYPE i,
  END OF st_seo_super_class,
  it_seo_super_class TYPE STANDARD TABLE OF st_seo_super_class,

  BEGIN OF st_skwf_error,
    id(20) TYPE c,
    type TYPE c,
    no(3) TYPE n,
    v1(50) TYPE c,
    v2(50) TYPE c,
    v3(50) TYPE c,
    v4(50) TYPE c,
  END OF st_skwf_error,

  BEGIN OF st_skwf_io,
    objtype TYPE c,
    class(10) TYPE c,
    objid(32) TYPE c,
  END OF st_skwf_io,
  it_skwf_io TYPE STANDARD TABLE OF st_skwf_io,

  it_string TYPE STANDARD TABLE OF string,

  BEGIN OF st_t100ext,
    name TYPE syuname,
    name_text TYPE ad_namtext,
    datum TYPE sydatum,
    datum_text TYPE string,
    object_name TYPE doku_obj,
    selfdef TYPE doku_selfd,
    no_docu TYPE flag,
    ltext TYPE string,
    ltext_onclick TYPE string,
  END OF st_t100ext,
  it_t100ext TYPE STANDARD TABLE OF st_t100ext,

  BEGIN OF st_table_structure,
    id TYPE char10,
    row_nr(3) TYPE n,
    fieldname TYPE fieldname,
    title_elem TYPE fieldname,
    link_row TYPE fieldname,
    row_def TYPE char1,
    colored_row TYPE fieldname,
    comparator TYPE char2,
    comp_value TYPE char30,
    title TYPE as4text,
  END OF st_table_structure,
  it_table_structure TYPE STANDARD TABLE OF st_table_structure,

  BEGIN OF st_tables,
    primary TYPE flag,
    tabname TYPE tabname,
    enqmode TYPE string,
  END OF st_tables,
  it_tables TYPE STANDARD TABLE OF st_tables,

  BEGIN OF st_tabname,
    tabname TYPE tabname,
  END OF st_tabname,
  it_tabname TYPE STANDARD TABLE OF st_tabname,

  BEGIN OF st_tabstrip,
    form TYPE fieldname,
    id(100) TYPE c,
    parent_id(100) TYPE c,
    tab_nr(2) TYPE n,
    firstrow TYPE flag,
    active_order(1) TYPE n,
    text_elem TYPE char30,
    comparator TYPE char2,
    comp_value TYPE char30,
    active TYPE flag,
    disabled TYPE flag,
    hidden TYPE flag,
    empty TYPE flag,
    text TYPE as4text,
  END OF st_tabstrip,
  it_tabstrip TYPE STANDARD TABLE OF st_tabstrip,

  BEGIN OF st_text_element,
    fieldname TYPE fieldname,
    txt_prefix TYPE char30,
    dtel_rollname TYPE rollname,
    dtel_field TYPE c,
    domname TYPE char30,
    domvalue(10) TYPE c,
    icon_id TYPE icon_d,
    icon_field TYPE c,
    conc_v1 TYPE fieldname,
    conc_copula(20) TYPE c,
    conc_v2 TYPE fieldname,
    conc_sep_space TYPE flag,
    msg_id(20) TYPE c,
    msg_nr(3) TYPE n,
    msg_v1 TYPE fieldname,
    msg_v2 TYPE fieldname,
    msg_v3 TYPE fieldname,
    msg_v4 TYPE fieldname,
    is_set TYPE flag,
  END OF st_text_element,
  it_text_element TYPE STANDARD TABLE OF st_text_element,

  BEGIN OF st_text_element_t,
    fieldname TYPE fieldname,
    spras TYPE spras,
    text TYPE as4text,
  END OF st_text_element_t,
  it_text_element_t TYPE STANDARD TABLE OF st_text_element_t,

  BEGIN OF st_textinput,
    space TYPE flag,
    name TYPE string,
    name_suffix TYPE string,
    no_name TYPE flag,
    value TYPE string,
    value_text TYPE string,
    value_double_length TYPE flag,
    value_ext TYPE string,
    value_ext_space TYPE flag,
    value_ext_text TYPE string,
    description TYPE string,
    flag TYPE flag,
    input TYPE flag,
    has_value_ext TYPE flag,
    flag_col TYPE i,
  END OF st_textinput,
  it_textinput TYPE STANDARD TABLE OF st_textinput,

  it_textpool TYPE STANDARD TABLE OF textpool,

  BEGIN OF st_textpool_addons,
    entry TYPE textpooltx,
    strlen TYPE i,
    dict_ref TYPE flag,
  END OF st_textpool_addons,
  it_textpool_addons TYPE STANDARD TABLE OF st_textpool_addons,

  it_seotypepls TYPE STANDARD TABLE OF seotypepls,

  BEGIN OF st_transaction,
    ttype TYPE c,
    ttext TYPE ttext_stct,
    classname TYPE seoclsname,
    method TYPE seocpdname,
    pgmna TYPE program_id,
    dypno TYPE dynpronr,
    repo_vari TYPE raldb_vari,
    objct TYPE xuobject,
    trframe TYPE eusel_frm,
    local TYPE eusel_loc,
    ind_vari TYPE tv_flag_ci,
    trans_var TYPE eu_trans_v,
    def_call_tcode TYPE tcode,
    def_skip_1 TYPE eusel_skip,
    clf_inhe TYPE s_gui_inhe,
    clf_ewt TYPE s_ewt,
    clf_profi TYPE s_prof,
    clf_pervas TYPE s_pervas,
    clf_service TYPE iacservic_,
    variant TYPE tcvariant,
  END OF st_transaction,

  BEGIN OF st_transaction_para,
    para_field TYPE eu_para_fn,
    para_value TYPE eu_para_vl,
  END OF st_transaction_para,
  it_transaction_para TYPE STANDARD TABLE OF st_transaction_para,

  BEGIN OF st_value_range,
    domvalue_l TYPE domvalue_l,
    domvalue_h TYPE domvalue_h,
    ddtext TYPE ddtext,
  END OF st_value_range,
  it_value_range TYPE STANDARD TABLE OF st_value_range,

  BEGIN OF st_varid,
    report TYPE vari_reprt,
    vari TYPE variant,
  END OF st_varid,
  it_varid TYPE STANDARD TABLE OF st_varid,

  BEGIN OF st_variant,
    program TYPE syrepid,
    variant TYPE syslset,
    selname TYPE rsscr_name,
    text TYPE sychar30,
    kind TYPE string,
    sign TYPE string,
    option TYPE string,
    low TYPE tvarv_val,
    high TYPE tvarv_val,
  END OF st_variant,
  it_variant TYPE STANDARD TABLE OF st_variant,

  BEGIN OF st_version_info,
    type(21) TYPE c,
    value(59) TYPE c,
  END OF st_version_info,
  it_version_info TYPE TABLE OF st_version_info,

  BEGIN OF st_zdd03p_ext,
    shlporigin_f TYPE flag,
    shlporigin_p TYPE flag,
    shlporigin_ddtext TYPE string,
  END OF st_zdd03p_ext,
  it_zdd03p_ext TYPE STANDARD TABLE OF st_zdd03p_ext,

  BEGIN OF st_zseomethod,
    pgmid TYPE pgmid,
    object TYPE trobjtype,
    devclass TYPE devclass,
    clsname TYPE seoclsname,
    cpdname TYPE seocpdname,
    active TYPE string,
    downloaded TYPE flag,
    subrc TYPE sysubrc,
  END OF st_zseomethod,
  it_zseomethod TYPE STANDARD TABLE OF st_zseomethod,


  BEGIN OF st_ztadir,
    pgmid TYPE pgmid,
    object TYPE trobjtype,
    subc TYPE subc,
    obj_name TYPE sobj_name,
    devclass TYPE devclass,
    progname TYPE progname,
    futype TYPE char1,
    funcname TYPE rs38l_fnam,
    o2type TYPE char1,
    o2name TYPE string,
    o2pagekey TYPE string,
    o2pagename TYPE string,
    mime_objtype TYPE c,
    mime_class(10) TYPE c,
    mime_objid(32) TYPE c,
    dynpronr TYPE dynpronr,
    descript TYPE string,
    tabclass TYPE tabclass,
    aggtype TYPE aggtype,
    masterlang TYPE masterlang,
    downloaded TYPE flag,
    subrc TYPE sysubrc,
  END OF st_ztadir,
  it_ztadir TYPE STANDARD TABLE OF st_ztadir.
*&---------------------------------------------------------------------*
*&  Include          ZSOFTCOPY_TEXT                                    *
*&---------------------------------------------------------------------*
*&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*
*&!!!!!!!!!!! generated by ZSOFTCOPY_MAKE !!!!! do not edit !!!!!!!!!!!*
*&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*
*&---------------------------------------------------------------------*
constants gc_version type sydatum value '20210302'.
data:
TPT_DDIC_DOMA type string,
TPT_DDIC_DTEL type string,
TPT_DDIC_ENQU type string,
TPT_DDIC_SHLP type string,
TPT_DDIC_STRU type string,
TPT_DDIC_TABL type string,
TPT_DDIC_TTYP type string,
TPT_DDIC_TYPE type string,
TPT_DDIC_VIEW type string,
TPT_FUGR_FUBA type string,
TPT_FUGR_FUGR type string,
TPT_FUGR_INCL type string,
TPT_FUGR_SCR type string,
TPT_MSAG type string,
TPT_O2_WAPA type string,
TPT_O2_WAPA_CTRL type string,
TPT_O2_WAPA_PAGE type string,
TPT_O2_WTAG type string,
TPT_O2_XSLT type string,
TPT_PACK_DEVC type string,
TPT_PARA type string,
TPT_PROG_INCL type string,
TPT_PROG_REPO type string,
TPT_SEO_CLAS type string,
TPT_SEO_INTF type string,
TPT_TOBJ type string,
TPT_TRAN type string,
TPT_TRAN_DIALOG type string,
TPT_TRAN_OBJ type string,
TPT_TRAN_PARAM type string,
TPT_TRAN_REPO type string,
TPT_TRAN_VARI type string,
TXTT_BSP_EXTENSION_NAME_VALUE type string,
TXTT_CLASS_NAME_VALUE type string,
TXTT_CONTEXT_MENU_FORM_ON_CTME type string,
TXTT_CONTROLLER_OF_NAME_VALUE type string,
TXTT_CURRENCY_QUANTITY_FIELD type string,
TXTT_ENTRY_HELP_CHECK type string,
TXTT_INCLUDE_NAME_VALUE type string,
TXTT_INTERFACE_NAME_VALUE type string,
TXTT_LINES_COLUMNS type string,
TXTT_PAGE_NAME_VALUE type string,
TXTT_REPORT_NAME_VALUE type string,
TXTT_SCREEN_FOR_NAME_VALUE type string,
TXTT_TABLES_JOIN_CONDITIONS type string,
TXTT_TRANSFORMATION_NAME_VALUE type string,
TXTT_TYPE_GROUP_OBJECT_TYPE type string,
TXTT_UNICODE_CHECKS_ACTIVE type string,
TXT_2_DIMENSIONAL type string,
TXT_ABAP_LOAD type string,
TXT_ABOUT type string,
TXT_ABSTRACT type string,
TXT_ACCESS type string,
TXT_ACCESS_TYPE_IS_GIVEN_FOR_A type string,
TXT_ACTIVATED type string,
TXT_ACTIVE___1 type string,
TXT_ACTIVE___2 type string,
TXT_ACTIVITIES type string,
TXT_ACTIVITY type string,
TXT_ALIAS type string,
TXT_ALIASES type string,
TXT_ALLOWED_OBJECT_TYPES type string,
TXT_ALLOW_RFC type string,
TXT_ALL_RIGHTS_RESERVED type string,
TXT_AND_OR type string,
TXT_APPENDING_VIEW type string,
TXT_APPLICATION type string,
TXT_APPLICATION_CLASS type string,
TXT_APPLICATION_COMPONENT type string,
TXT_ASSIGNED_ERROR_PAGE type string,
TXT_ASSOCIATED_TYPE type string,
TXT_ASSOCIATED_TYPE_FOR_LOW_HI type string,
TXT_AS_LABEL_LEFT type string,
TXT_AS_LABEL_RIGHT type string,
TXT_ATTRIBUTE type string,
TXT_ATTRIBUTES___1 type string,
TXT_ATTRIBUTES___2 type string,
TXT_AUTHORIZATION_FIELDS type string,
TXT_AUTHORIZATION_GROUP type string,
TXT_AUTHORIZATION_OBJECT___1 type string,
TXT_AUTHORIZATION_OBJECT___2 type string,
TXT_AUTO type string,
TXT_AUTOR type string,
TXT_BINDABLE type string,
TXT_BLANK type string,
TXT_BRG type string,
TXT_BROWSER_CACHE type string,
TXT_BROWSER_SPECIFIC type string,
TXT_BSP_APPLICATION type string,
TXT_BSP_APPLICATIONS type string,
TXT_BSP_ELEMENT type string,
TXT_BSP_ELEMENTS_AND_STATIC_HT type string,
TXT_BSP_ELEMENTS_ONLY type string,
TXT_BSP_ELEMENT_BASIS_CLASS type string,
TXT_BSP_EXTENSION type string,
TXT_BSP_EXTENSIONS type string,
TXT_BSP_EXTENSION_CLASS type string,
TXT_BSP_LIBRARY type string,
TXT_BUFFERING type string,
TXT_BUFFERING_TYPE type string,
TXT_BUILT_IN_TYPE type string,
TXT_CACHING type string,
TXT_CALL_BY_REF type string,
TXT_CATEGORY type string,
TXT_CHANGED_ON type string,
TXT_CHANGES_ARE_RECORDED type string,
TXT_CHANGE_DOCUMENT type string,
TXT_CHANGING type string,
TXT_CHECK type string,
TXT_CHECK_TABLE type string,
TXT_CLASS type string,
TXT_CLASSES type string,
TXT_CLASSIFICATION type string,
TXT_CLASS_DOCUMENTATION type string,
TXT_CLASS_LIBRARY type string,
TXT_CLASS_NAME type string,
TXT_CLIENT type string,
TXT_CLUSTER_TABLE type string,
TXT_COLL_RUN type string,
TXT_COLUMN type string,
TXT_COLUMNS type string,
TXT_COLUMN_HEADING type string,
TXT_COMPARE_FLAG type string,
TXT_COMPARISON_VALUE type string,
TXT_COMPILATION type string,
TXT_COMPLETE type string,
TXT_COMPLETED type string,
TXT_COMPONENT type string,
TXT_COMPONENTS type string,
TXT_COMPONENT_INFORMATION type string,
TXT_COMPONENT_TYPE type string,
TXT_COMPONENT_VERSION type string,
TXT_COMPRESSED type string,
TXT_COMPRESSION type string,
TXT_CONTEXT_MENU type string,
TXT_CONTROLLER type string,
TXT_CONTROLLER_CLASS type string,
TXT_CONTROL_COMPOSITE_NAME type string,
TXT_CONVERSION_EXIT type string,
TXT_CONVERSION_FOR_AUTHORIZATI type string,
TXT_CONVERS_ROUTINE type string,
TXT_CREATED type string,
TXT_CREATED_BY___1 type string,
TXT_CREATED_BY___2 type string,
TXT_CREATED_ON type string,
TXT_CREATE_STATEMENT type string,
TXT_CREATION_DATE type string,
TXT_CROSS_CLIENT type string,
TXT_CUA_LOAD type string,
TXT_CURRENCY type string,
TXT_CURSOR_POSITION type string,
TXT_DATABASE_CONTENT type string,
TXT_DATABASE_DATA type string,
TXT_DATABASE_INFORMATION type string,
TXT_DATABASE_SYSTEM type string,
TXT_DATABASE_TABLES type string,
TXT_DATA_BROWSER_TABLE_VIEW_MA type string,
TXT_DATA_CLASS type string,
TXT_DATA_COLLECTION type string,
TXT_DATA_ELEM type string,
TXT_DATA_ELEMENTS type string,
TXT_DATA_ELEMENT___1 type string,
TXT_DATA_ELEMENT___2 type string,
TXT_DATA_TYPE type string,
TXT_DBSL_PATCH_LEVEL type string,
TXT_DBSL_VERSION type string,
TXT_DB_CLIENT_LIB type string,
TXT_DB_RELEASES type string,
TXT_DECIMAL_PLACES___M type string,
TXT_DECIMAL_PLACES___T type string,
TXT_DEFAULTS type string,
TXT_DEFAULT_COMPONENT_NAME type string,
TXT_DEFAULT_PREFIX type string,
TXT_DEFAULT_VALUES type string,
TXT_DEFAULT_VALUES_FOR type string,
TXT_DEFAULT_VALUE___1 type string,
TXT_DEFAULT_VALUE___2 type string,
TXT_DEFINITION type string,
TXT_DEFLG type string,
TXT_DELIVERY_AND_MAINTENANCE type string,
TXT_DELIVERY_CLASS type string,
TXT_DELTA_HANDLING type string,
TXT_DESCRIPTION type string,
TXT_DESELECT_ALL type string,
TXT_DFLT_VALUE type string,
TXT_DIALOG_BEHAVIOR type string,
TXT_DIALOG_DATA_TRANSPORT_DETA type string,
TXT_DIALOG_TRANSACTION type string,
TXT_DIALOG_TYPE type string,
TXT_DICTIONARY_REFERENCE type string,
TXT_DICT_FIELD type string,
TXT_DICT_MODIFIED type string,
TXT_DICT_OBJS type string,
TXT_DIRECTORY type string,
TXT_DISABLED type string,
TXT_DISPLAY type string,
TXT_DISPLAY_ATTR type string,
TXT_DLEN type string,
TXT_DOCUMENTATION type string,
TXT_DOMAIN type string,
TXT_DOMAINS type string,
TXT_DROPDOWN type string,
TXT_DTYP type string,
TXT_DYNAMIC_CONTEXT_MENU type string,
TXT_DYNAMIC_VALUE_ALLOWED type string,
TXT_EASY_WEB_TRANSACTION type string,
TXT_EDITOR_LOCK type string,
TXT_EDIT_LOCK type string,
TXT_ELEMENTARY_SRCH_HLP type string,
TXT_ELEMENTARY_TYPE type string,
TXT_ELEMENT_CONTENT type string,
TXT_ELEMENT_HANDLER_CLASS type string,
TXT_ELEMENT_INTERPRETS_CONTENT type string,
TXT_ELEMENT_LIST type string,
TXT_EMPTY_TAB type string,
TXT_ENHANCEMENT_CATEGORY type string,
TXT_ENHANCEMENT_CATEGORY_FOR_S type string,
TXT_ENTER_A_PACKAGE type string,
TXT_ENTRY type string,
TXT_ENTRY_HELP type string,
TXT_EQ type string,
TXT_ERROR_HANDLING type string,
TXT_ERROR_SEVERITY type string,
TXT_EVENT type string,
TXT_EVENTS type string,
TXT_EVENT_HANDLER type string,
TXT_EXCEPTIONS type string,
TXT_EXCEPTION___1 type string,
TXT_EXCEPTION___2 type string,
TXT_EXCLUSIVE type string,
TXT_EXP type string,
TXT_EXPORT type string,
TXT_FIELD type string,
TXT_FIELDS type string,
TXT_FIELD_LABEL type string,
TXT_FIELD_NAME type string,
TXT_FINAL type string,
TXT_FIRST_PAGE type string,
TXT_FIXED_FONT type string,
TXT_FIXED_POINT_ARITHMETIC type string,
TXT_FIX_VAL type string,
TXT_FLOW_LOGIC type string,
TXT_FOREIGN_KEY type string,
TXT_FOREIGN_SOURCE_SYSTEM type string,
TXT_FORMAT type string,
TXT_FORMATTING type string,
TXT_FORWARD_DECLARATIONS type string,
TXT_FRAMESET type string,
TXT_FRIENDS type string,
TXT_FROM_MODULE_POOL type string,
TXT_FULLY_BUFFERED type string,
TXT_FUNCTIONAL_TYPE type string,
TXT_FUNCTION_CODE type string,
TXT_FUNCTION_GROUP type string,
TXT_FUNCTION_GROUPS type string,
TXT_FUNCTION_GROUP_DOC type string,
TXT_FUNCTION_MODULE type string,
TXT_FUNCTION_MODULES type string,
TXT_FUNCTION_MODULE_DOCUMENTAT type string,
TXT_FURTHER_CHARACTERISTICS type string,
TXT_FURTHER_OPTIONS type string,
TXT_GENERAL_ATTR type string,
TXT_GENERAL_DATA type string,
TXT_GENERIC_AREA_BUFFERED type string,
TXT_GET_PARAMETER type string,
TXT_GLOBAL type string,
TXT_GROUP type string,
TXT_GROUP_1 type string,
TXT_GROUP_2 type string,
TXT_GROUP_3 type string,
TXT_GROUP_4 type string,
TXT_GUI_STATUS type string,
TXT_GUI_SUPPORT type string,
TXT_HEADING type string,
TXT_HEIGHT type string,
TXT_HELP type string,
TXT_HIDDEN type string,
TXT_HIERARCHY type string,
TXT_HIGHEST_SUPPORT_PACKAGE type string,
TXT_HOLD_DATA type string,
TXT_HOLD_SCROLL_POSITION type string,
TXT_HOST type string,
TXT_HOST_DATA type string,
TXT_HOT_KEY type string,
TXT_HTTPS type string,
TXT_ICON type string,
TXT_ICON_NAME type string,
TXT_ICON_TEXT type string,
TXT_IMMEDIATE_START_NO_RESTART type string,
TXT_IMP type string,
TXT_IMPLEMENTATION type string,
TXT_IMPLEMENTED_ACTIVE type string,
TXT_IMPORT type string,
TXT_INACTIVE type string,
TXT_INCLUDE type string,
TXT_INCLUDES type string,
TXT_INCLUDE_NAME type string,
TXT_INCLUSIVE type string,
TXT_INFO type string,
TXT_INFORMATION type string,
TXT_INHERIT_GUI_ATTRIBUTES type string,
TXT_INITIALIZATION_AND_ACCESS type string,
TXT_INITIAL_BSP type string,
TXT_INITIAL_LINE_NUMBER type string,
TXT_INITIAL_VALUE type string,
TXT_INITIAL_VALUES type string,
TXT_INPUT type string,
TXT_INSTALLATION_NUMBER type string,
TXT_INSTANTIATION type string,
TXT_INTERFACE type string,
TXT_INTERFACES type string,
TXT_INTERFACE_COMPONENT type string,
TXT_INTERFACE_DOCUMENTATION type string,
TXT_INTERNALLY_RELEASED_ON type string,
TXT_INTERNAL_NAME type string,
TXT_INTERVALS type string,
TXT_INVISIBLE type string,
TXT_IP_ADDRESS type string,
TXT_IS_ERROR_PAGE type string,
TXT_ITERATION_OVER_ELEMENT_CON type string,
TXT_JOIN_CONDITIONS type string,
TXT_KERNEL_INFORMATION___1 type string,
TXT_KERNEL_INFORMATION___2 type string,
TXT_KERNEL_RELEASE type string,
TXT_KEY type string,
TXT_KEY_ATTRIBUTE_DEFINED_FOR1 type string,
TXT_KEY_ATTRIBUTE_DEFINED_FOR2 type string,
TXT_KEY_CATEGORY type string,
TXT_KEY_COMPONENTS type string,
TXT_KEY_DEFINITION type string,
TXT_KEY___KEY type string,
TXT_LANGUAGE type string,
TXT_LAST_CHANGED type string,
TXT_LAST_CHANGED_AT type string,
TXT_LAST_CHANGED_BY___1 type string,
TXT_LAST_CHANGED_BY___2 type string,
TXT_LAST_CHANGED_BY___3 type string,
TXT_LAST_CHANGED_ON type string,
TXT_LAST_CHANGED_ON_BY type string,
TXT_LAST_GENERATION type string,
TXT_LAYOUT type string,
TXT_LEADING_ZEROS type string,
TXT_LENGTH type string,
TXT_LEVEL type string,
TXT_LICENSE_EXPIRATION type string,
TXT_LIFETIME type string,
TXT_LINE type string,
TXT_LINES type string,
TXT_LINE_TYPE type string,
TXT_LIST_HEADER type string,
TXT_LIST_HEADINGS type string,
TXT_LOCAL_IN_PROGRAM type string,
TXT_LOCAL_TYPES type string,
TXT_LOCK_MODE type string,
TXT_LOCK_OBJECTS type string,
TXT_LOCK_OBJECT___1 type string,
TXT_LOCK_OBJECT___2 type string,
TXT_LOCK_PARAMETER type string,
TXT_LOGICAL_DATABASE type string,
TXT_LOGICAL_STORAGE_PARAMETERS type string,
TXT_LOGON type string,
TXT_LOG_DATA_CHANGES type string,
TXT_LONG type string,
TXT_LONG_TEXT type string,
TXT_LOWERCASE type string,
TXT_LOWER_LIMIT type string,
TXT_LPOS type string,
TXT_MACHINE_TYPE type string,
TXT_MACROS type string,
TXT_MAINTENANCE type string,
TXT_MAINTENANCE_OF_STANDARD_TR type string,
TXT_MAINTENANCE_SCREENS type string,
TXT_MAINTENANCE_TYPE type string,
TXT_MAINT_SCREEN_NO type string,
TXT_MAINT_STATUS type string,
TXT_MAIN_PACKAGE type string,
TXT_MAIN_PROGRAM type string,
TXT_MANIPULATION_OF_ELEMENT_CO type string,
TXT_MAX_NO_OF_LINES type string,
TXT_MEDIUM type string,
TXT_MENU type string,
TXT_MESSAGE type string,
TXT_MESSAGES type string,
TXT_MESSAGE_CLASS type string,
TXT_MESSAGE_CLASSES type string,
TXT_MESSAGE_SHORT_TEXT type string,
TXT_METHOD type string,
TXT_METHODS type string,
TXT_METHOD_TYPE type string,
TXT_MIMES type string,
TXT_MIME_TYPE type string,
TXT_MOD type string,
TXT_MODAL_DIALOG_BOX type string,
TXT_MODE type string,
TXT_MODELED_ONLY type string,
TXT_MODIFIED type string,
TXT_MOD_GROUPS_FUNCTIONS type string,
TXT_NAME type string,
TXT_NAME_OF_REF_TYPE type string,
TXT_NAME_OF_SCREEN_FIELD type string,
TXT_NAVIGATION type string,
TXT_NAVIGATION_REQUEST type string,
TXT_NEXT_SCREEN type string,
TXT_NO type string,
TXT_NORMAL type string,
TXT_NORMAL_FUNCTION_MODULE type string,
TXT_NOT_RELEASED type string,
TXT_NO_LENGTH_RESTRICTION type string,
TXT_NO_OF_CHARACTERS type string,
TXT_NO_OF_KEY_FIELDS type string,
TXT_NO_OR_USER_RECORDING_ROUTI type string,
TXT_NO_RESET type string,
TXT_OBJECT type string,
TXT_OBJECTS type string,
TXT_OBJECT_TRANSACTION type string,
TXT_OBJECT_TYPE type string,
TXT_OCCUPIED type string,
TXT_ONE_STEP type string,
TXT_OO_TRANSACTION_MODEL type string,
TXT_OPERATING_SYSTEM type string,
TXT_OPERATOR type string,
TXT_OPTION type string,
TXT_OPTIONAL type string,
TXT_OPTIONS type string,
TXT_OP_RELEASE type string,
TXT_ORIGINAL_LANG type string,
TXT_ORIGINAL_LANGUAGE type string,
TXT_ORIGIN_OF_THE_INPUT_HELP type string,
TXT_OTHER_ATTRIBUTES type string,
TXT_OUTPUT type string,
TXT_OUTPUT_CHARACTERISTICS type string,
TXT_OUTPUT_LENGTH type string,
TXT_OUTPUT_ONLY type string,
TXT_OVERVIEW_SCREEN type string,
TXT_OWNER type string,
TXT_PACKAGE type string,
TXT_PACKAGES_INCLUDED type string,
TXT_PACKAGE_CHECK_AS_CLIENT type string,
TXT_PACKAGE_CHECK_AS_SERVER type string,
TXT_PACKAGE_INTERFACE type string,
TXT_PACKAGE_INTERFACES type string,
TXT_PACKAGE_NOT_EXTENDABLE type string,
TXT_PACKAGE_PROPERTIES type string,
TXT_PAGE type string,
TXT_PAGES_WITH_FLOW_LOGIC type string,
TXT_PAGE_ATTRIBUTES type string,
TXT_PAGE_DONE_IS_NOT_RETURNED_ type string,
TXT_PAGE_FRAGMENT type string,
TXT_PAGE_FRAGMENTS type string,
TXT_PAGE_TYPE type string,
TXT_PAGE_WITH_FLOW_LOGIC type string,
TXT_PARAMETER type string,
TXT_PARAMETERS type string,
TXT_PARAMETER_ID type string,
TXT_PARAMETER_NAME type string,
TXT_PARAMETER_TRANSACTION type string,
TXT_PASS_VALUE type string,
TXT_PERSON_RESPONS type string,
TXT_PERSON_RESPONSIBLE___1 type string,
TXT_PERSON_RESPONSIBLE___2 type string,
TXT_PERVASIVE_ENABLED type string,
TXT_PLATFORM_ID type string,
TXT_PLEASE_ENTER_A_ROOT_DIR type string,
TXT_PLEASE_ENTER_A_VALID_PATH type string,
TXT_POOLED_TABLE type string,
TXT_POOL_CLUSTER type string,
TXT_POSITION type string,
TXT_POSS_ENTRIES_KEY type string,
TXT_PREVIOUS_LOGON type string,
TXT_PRIMARY_TABLE type string,
TXT_PROCESSING_TYPE type string,
TXT_PRODUCT_UNDER_GPL type string,
TXT_PROFESSIONAL_USER_TRANSACT type string,
TXT_PROGRAM type string,
TXT_PROGRAMS type string,
TXT_PROGRAM_GUI type string,
TXT_PROGRAM_NAME type string,
TXT_PROGRAM_SCREEN type string,
TXT_PROGRAM_STATUS type string,
TXT_PROPERTIES type string,
TXT_PROPERTY_LIST type string,
TXT_QUANTITY_FIELD type string,
TXT_READ_ONLY type string,
TXT_RECORDING_ROUTINE type string,
TXT_REFERENCES type string,
TXT_REFERENCE_FIELD type string,
TXT_REFERENCE_TABLE type string,
TXT_REFERENCE_TO_PREDEFINED_TY type string,
TXT_REFERENCE_TYPE type string,
TXT_REF_FIELD type string,
TXT_RELEASE type string,
TXT_RELEASED_INTERNALLY type string,
TXT_REMOTE_ENABLED_MODULE type string,
TXT_REPORT type string,
TXT_REPORT_TRANSACTION type string,
TXT_REPOSITORY_DATA type string,
TXT_REQUIRED type string,
TXT_RESP_TO_DBLCLK type string,
TXT_RESTRICT type string,
TXT_RIGHT_JUST type string,
TXT_RSYN_FILE type string,
TXT_RTYPE type string,
TXT_SAPGUI_FOR_HTML type string,
TXT_SAPGUI_FOR_JAVA type string,
TXT_SAPGUI_FOR_WINDOWS type string,
TXT_SAP_DATA type string,
TXT_SAP_SYSTEM_DATA type string,
TXT_SAP_VERSIONS type string,
TXT_SAVED type string,
TXT_SCREEN type string,
TXT_SCREENS type string,
TXT_SCREEN_FOR type string,
TXT_SCREEN_GROUP type string,
TXT_SCREEN_NUMBER type string,
TXT_SCREEN_TYPE type string,
TXT_SCROLLABLE type string,
TXT_SDIS type string,
TXT_SEARCH_HELP type string,
TXT_SEARCH_HELP_EXIT type string,
TXT_SEARCH_HELP_PARAMETER type string,
TXT_SEC type string,
TXT_SECONDARY_TABLES type string,
TXT_SELECTION type string,
TXT_SELECTION_CONDITIONS type string,
TXT_SELECTION_CRITERIA type string,
TXT_SELECTION_METHOD type string,
TXT_SELECTION_SCREEN type string,
TXT_SELECTION_SCREEN_VERSION type string,
TXT_SELECTION_TEXTS type string,
TXT_SELECT_ALL type string,
TXT_SELF_EXPLANATY type string,
TXT_SERVER_CACHE type string,
TXT_SERVER_NAME type string,
TXT_SERVICE type string,
TXT_SETTINGS type string,
TXT_SET_GET_PARAMETERS type string,
TXT_SET_PARAMETER type string,
TXT_SHARED_MEMORY_ENABLED type string,
TXT_SHORT type string,
TXT_SHORT_DESCRIPTION_OF_SOFTW type string,
TXT_SHORT_DESCRIPTION___1 type string,
TXT_SHORT_DESCRIPTION___2 type string,
TXT_SHORT_TEXT___1 type string,
TXT_SHORT_TEXT___2 type string,
TXT_SIGN type string,
TXT_SINGLE_RECORDS_BUFF type string,
TXT_SINGLE_SCREEN type string,
TXT_SINGLE_VARS type string,
TXT_SIZE_CATEGORY type string,
TXT_SKIP_INITIAL_SCREEN type string,
TXT_SOFTWARE_COMPONENT type string,
TXT_SOURCECDE type string,
TXT_SOURCE_CODE type string,
TXT_SPECIAL_ATTR type string,
TXT_SPOS type string,
TXT_SRCH_HELP type string,
TXT_SRCH_HELPS type string,
TXT_STANDARD_RECORDING_ROUTINE type string,
TXT_START type string,
TXT_START_DELAYED type string,
TXT_START_IMMED type string,
TXT_START_USING_VARIANT type string,
TXT_START_WITH_VARIANT type string,
TXT_STATEFUL type string,
TXT_STATUS type string,
TXT_STRUCTURE type string,
TXT_STRUCTURED_ROW_TYPE type string,
TXT_STRUCTURED_TYPE type string,
TXT_STRUCTURES type string,
TXT_SUBSCREEN type string,
TXT_SUPERCLASS type string,
TXT_SUPPLEMENTARY_DOCUMENTATIO type string,
TXT_SUPPORTS_PORTAL_INTEGRATIO type string,
TXT_SUP_PKG_LVL type string,
TXT_SURROUNDING_PACKAGE type string,
TXT_SWITCH_OFF_RUNTIME_COMPRES type string,
TXT_SYMBOL type string,
TXT_SYSTEM type string,
TXT_SYSTEM_INFORMATION type string,
TXT_SYSTEM_TIME type string,
TXT_TABLE type string,
TXT_TABLES type string,
TXT_TABLE_MAINTENANCE_GENERATO type string,
TXT_TABLE_TYPE type string,
TXT_TABLE_TYPES type string,
TXT_TARGET type string,
TXT_TECHNICAL_DIALOG_DETAILS type string,
TXT_TECHNICAL_SETTINGS type string,
TXT_TEMPLATE_NON_EXECUTABLE type string,
TXT_TEXT type string,
TXT_TEXTS_IO_TEMPLATES type string,
TXT_TEXT_ELEMENTS type string,
TXT_TEXT_OR_IO_FIELD type string,
TXT_TEXT_TABLE type string,
TXT_THEME type string,
TXT_TIME_CHANGED type string,
TXT_TITLE type string,
TXT_TRANSACTION type string,
TXT_TRANSACTIONS type string,
TXT_TRANSACTION_CLASSIFICATION type string,
TXT_TRANSACTION_CODE type string,
TXT_TRANSACTION_TEXT type string,
TXT_TRANSACTION_VARIANT type string,
TXT_TRANSFER_OPTIONS type string,
TXT_TRANSFORMATION type string,
TXT_TRANSFORMATIONS type string,
TXT_TRANSPORT_ATTRIBUTES type string,
TXT_TRANSPORT_LAYER type string,
TXT_TRANSP_TABLE type string,
TXT_TWO_STEP type string,
TXT_TYPES type string,
TXT_TYPE_DEFINITIONS type string,
TXT_TYPE_GROUP type string,
TXT_TYPE_GRPS type string,
TXT_TYPE_IS_GENERIC type string,
TXT_TYPE_OF_SCREEN_ELEMENT type string,
TXT_TYPE_SPEC type string,
TXT_TYPE___1 type string,
TXT_TYPE___2 type string,
TXT_TYPING type string,
TXT_TYPINGMETH type string,
TXT_TYPING_METHOD type string,
TXT_UNICODE_CHECKS type string,
TXT_UNICODE_SYSTEM type string,
TXT_UPDATES type string,
TXT_UPDATE_MODULE type string,
TXT_UPPERLIMIT type string,
TXT_UPPER_LOWER_CASE_ENTRY type string,
TXT_URL type string,
TXT_USAGE_DATA type string,
TXT_USER type string,
TXT_USER_DEFINED_VALIDATION type string,
TXT_USE_ACCESS type string,
TXT_VALUE type string,
TXT_VALUES type string,
TXT_VALUE_LIST type string,
TXT_VALUE_RANGE type string,
TXT_VARIANT type string,
TXT_VARIANTS type string,
TXT_VARIANTS_OF_REPORTS type string,
TXT_VARIANT_TRANSACTION type string,
TXT_VERSION type string,
TXT_VIEW type string,
TXT_VIEWS type string,
TXT_VIEW_FIELD type string,
TXT_VIEW_FLDS type string,
TXT_VISIBILITY type string,
TXT_VISIBLE type string,
TXT_VISLG type string,
TXT_W type string,
TXT_WITHOUT_APPLICATION_TOOLBA type string,
TXT_WITHOUT_TEMPLATE type string,
TXT_WITH_ICON type string,
TXT_WO_SCRIPT_CODE type string,
TXT_YES type string,
VAR_NAME_VALUE type string.
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_VARIABLES                              *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


DATA:
g_add_db_content      TYPE flag      VALUE abap_true,
g_add_db_format_csv   TYPE flag      VALUE abap_true,
g_add_db_format_xml   TYPE flag      VALUE abap_true,
g_add_db_max_lines    TYPE i         VALUE 500,
g_add_elem_ddic       TYPE flag      VALUE abap_true,
g_add_elem_tabl       TYPE flag      VALUE abap_true,
g_add_elem_view       TYPE flag      VALUE abap_true,
g_add_elem_ttyp       TYPE flag      VALUE abap_true,
g_add_elem_struc      TYPE flag      VALUE abap_true,
g_add_elem_dtel       TYPE flag      VALUE abap_true,
g_add_elem_doma       TYPE flag      VALUE abap_true,
g_add_elem_shlp       TYPE flag      VALUE abap_true,
g_add_elem_enqu       TYPE flag      VALUE abap_true,
g_add_elem_type       TYPE flag      VALUE abap_true,
g_add_elem_clslib     TYPE flag      VALUE abap_true,
g_add_elem_clas       TYPE flag      VALUE abap_true,
g_add_elem_intf       TYPE flag      VALUE abap_true,
g_add_elem_prog       TYPE flag      VALUE abap_true,
g_add_elem_fugr       TYPE flag      VALUE abap_true,
g_add_elem_fuba       TYPE flag      VALUE abap_true,
g_add_elem_scr        TYPE flag      VALUE abap_true,
g_add_elem_fuincl     TYPE flag      VALUE abap_true,
g_add_elem_incl       TYPE flag      VALUE abap_true,
g_add_elem_msag       TYPE flag      VALUE abap_true,
g_add_elem_o2appl     TYPE flag      VALUE abap_true,
g_add_elem_o2applbsp  TYPE flag      VALUE abap_true,
g_add_elem_o2applctrl TYPE flag      VALUE abap_true,
g_add_elem_o2applincl TYPE flag      VALUE abap_true,
g_add_elem_o2applmime TYPE flag      VALUE abap_true,
g_add_elem_o2applview TYPE flag      VALUE abap_true,
g_add_elem_o2taglib   TYPE flag      VALUE abap_true,
g_add_elem_para       TYPE flag      VALUE abap_true,
g_add_elem_tobj       TYPE flag      VALUE abap_true,
g_add_elem_tran       TYPE flag      VALUE abap_true,
g_add_elem_xslt       TYPE flag      VALUE abap_true,
g_add_sourcecode      TYPE flag      VALUE abap_true,
g_add_report_variants TYPE flag      VALUE abap_true,
g_empty_tab           TYPE c         VALUE 'D',
g_folder              TYPE string,
g_pack                TYPE devclass,
g_cnt_elems           TYPE i         VALUE 0,
g_cnt_downloads       TYPE i         VALUE 0,
g_cnt_link_leaves     type num10,

*must be initial
gt_link               TYPE it_link,
*download database contents (all packages)
gt_tadir              TYPE STANDARD TABLE OF tadir,
*download elements
gt_ztadir             TYPE it_ztadir,
*download class methods
gt_zseomethod         TYPE it_zseomethod,
gt_tdevc              TYPE STANDARD TABLE OF tdevc,
gs_tdevc              TYPE tdevc,
gt_table_structure    TYPE it_table_structure,
gt_tabstrip           TYPE it_tabstrip,
gt_text_element       TYPE it_text_element,
gt_text_element_t     TYPE it_text_element_t,
gt_varid_broken       TYPE it_varid,
*suppress transfer status from GUI_DOWNLOAD
g_has_download_status TYPE flag.

CONSTANTS:
gc_delimiter          TYPE c         VALUE '\',
gc_empty_tab_disable  TYPE c         VALUE 'D',
gc_empty_tab_display  TYPE c         VALUE 'N',
gc_empty_tab_hide     TYPE c         VALUE 'H',
gc_extension_csv      TYPE char3     VALUE 'csv',
gc_extension_htm      TYPE char3     VALUE 'htm',
gc_extension_txt      TYPE char3     VALUE 'txt',
gc_extension_xml      TYPE char3     VALUE 'xml',
gc_extension_xsl      TYPE char3     VALUE 'xsl',
gc_futype_group       TYPE c         VALUE 'G',
gc_futype_include     TYPE c         VALUE 'I',
gc_futype_screen      TYPE c         VALUE 'S',
gc_futype_module      TYPE c         VALUE 'M',
gc_o2type_bsp         TYPE c         VALUE ' ',
gc_o2type_ctrl        TYPE c         VALUE 'C',
gc_o2type_incl        TYPE c         VALUE 'X',
gc_o2type_mime        TYPE c         VALUE 'M',
gc_o2type_tag         TYPE c         VALUE 'T',
gc_o2type_view        TYPE c         VALUE 'V',
gc_subrc_deselected   TYPE sysubrc   VALUE 97,
gc_subrc_do_not_add   TYPE sysubrc   VALUE 98,
gc_subrc_not_found    TYPE sysubrc   VALUE 99,
gc_src_max_rows       TYPE i         VALUE 16000,
gc_tcode_dialog       TYPE c         VALUE 'D',
gc_tcode_object       TYPE c         VALUE 'O',
gc_tcode_parameter    TYPE c         VALUE 'P',
gc_tcode_report       TYPE c         VALUE 'R',
gc_tcode_variant      TYPE c         VALUE 'V'.

TABLES:
dd02l,
tdevc,
sscrfields.


*-----------------------------------------------------------------------
* form: init
*-----------------------------------------------------------------------
FORM init.
  REFRESH:
  gt_ztadir,
  gt_zseomethod.

  g_cnt_elems = 0.
  g_cnt_downloads = 0.
ENDFORM.                    "init
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_GUI                                    *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
*  Selection screen declaration
*-----------------------------------------------------------------------
SELECTION-SCREEN FUNCTION KEY 1.
SELECTION-SCREEN FUNCTION KEY 2.
SELECTION-SCREEN FUNCTION KEY 3.

*-----------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE t_choice.
* Package
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(22) t_pack.
SELECT-OPTIONS p_devcl FOR tdevc-devclass.
SELECTION-SCREEN END OF LINE.
* Folder
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(25) t_path.
PARAMETERS p_folder TYPE rlgrap-filename MEMORY ID mfolder.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.

*-----------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE t_opts.
* Add SourceCode
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(25) t_add_sc.
PARAMETERS p_add_sc AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN END OF LINE.
* Empty Tab: display|disabled|hidden
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(25) t_etab.
PARAMETERS p_etab_n RADIOBUTTON GROUP etab.
SELECTION-SCREEN COMMENT 34(10) t_etab_n FOR FIELD p_etab_n.
PARAMETERS p_etab_d RADIOBUTTON GROUP etab DEFAULT 'X'.
SELECTION-SCREEN COMMENT 49(10) t_etab_d FOR FIELD p_etab_d.
PARAMETERS p_etab_h RADIOBUTTON GROUP etab.
SELECTION-SCREEN COMMENT 64(10) t_etab_h FOR FIELD p_etab_h.
SELECTION-SCREEN END OF LINE.
* database content
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(25) t_dbcont.
PARAMETERS p_dbcont AS CHECKBOX DEFAULT abap_true
  MODIF ID dis
  USER-COMMAND u_dbcont.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 6(20) t_dbform.
PARAMETERS p_db_csv AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 29(15) t_db_csv.
PARAMETERS p_db_xml AS CHECKBOX DEFAULT abap_false.
SELECTION-SCREEN COMMENT 47(15) t_db_xml.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 6(20) t_dbmax.
PARAMETERS p_dbmax TYPE i DEFAULT 2000.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 6(17) t_dblim.
SELECT-OPTIONS p_dblim FOR dd02l-tabname.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 6(20) t_dbcls.
PARAMETERS p_dbclsa AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 29(4) t_dbclsa.
PARAMETERS p_dbclsc AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 36(4) t_dbclsc.
PARAMETERS p_dbclse AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 43(4) t_dbclse.
PARAMETERS p_dbclsg AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 50(4) t_dbclsg.
PARAMETERS p_dbclsl AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 57(4) t_dbclsl.
PARAMETERS p_dbclss AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 64(4) t_dbclss.
PARAMETERS p_dbclsw AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 71(4) t_dbclsw.
SELECTION-SCREEN PUSHBUTTON 78(4) b_dbcls USER-COMMAND b_dbcls.
SELECTION-SCREEN END OF LINE.
* variants of reports
SELECTION-SCREEN ULINE.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 1(25) t_add_rv.
PARAMETERS p_add_rv AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.

*-----------------------------------------------------------------------
SELECTION-SCREEN: BEGIN OF BLOCK b3 WITH FRAME TITLE t_elems.
SELECTION-SCREEN BEGIN OF LINE.
* Dictionary Objects
PARAMETERS p_ddic AS CHECKBOX DEFAULT abap_true
  MODIF ID dis
  USER-COMMAND u_ddic.
SELECTION-SCREEN COMMENT 5(39) t_ddic.
* Transactions
PARAMETERS p_tran AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 49(39) t_tran.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Dictionary Objects - Database Tables
SELECTION-SCREEN POSITION 6.
PARAMETERS p_tabl AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_tabl.
* Message Classes
PARAMETERS p_msag AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 49(39) t_msag.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Dictionary Objects - Views
SELECTION-SCREEN POSITION 6.
PARAMETERS p_view AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_view.
* SET/GET Parameters
PARAMETERS p_para AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 49(39) t_para.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Dictionary Objects - Table Types
SELECTION-SCREEN POSITION 6.
PARAMETERS p_ttyp AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_ttyp.
* Authorization Object
PARAMETERS p_tobj AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 49(39) t_tobj.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Dictionary Objects - Structures
SELECTION-SCREEN POSITION 6.
PARAMETERS p_struc AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_struc.
* Transformations
PARAMETERS p_xslt AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 49(39) t_xslt.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Dictionary Objects - Data Elements
SELECTION-SCREEN POSITION 6.
PARAMETERS p_dtel AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_dtel.
* BSP Library
PARAMETERS p_bsplib AS CHECKBOX DEFAULT abap_true
  MODIF ID dis
  USER-COMMAND u_bsplib.
SELECTION-SCREEN COMMENT 49(39) t_bsplib.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Dictionary Objects - Domains
SELECTION-SCREEN POSITION 6.
PARAMETERS p_doma AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_doma.
* BSP Library - BSP Applications
SELECTION-SCREEN POSITION 50.
PARAMETERS p_bspapp AS CHECKBOX DEFAULT abap_true
  MODIF ID dis
  USER-COMMAND u_bspapp.
SELECTION-SCREEN COMMENT 54(34) t_bspapp.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Dictionary Objects - Search Helps
SELECTION-SCREEN POSITION 6.
PARAMETERS p_shlp AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_shlp.
* BSP Library - BSP Applications - Controller
SELECTION-SCREEN POSITION 55.
PARAMETERS p_wctrl AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 59(29) t_wctrl.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Dictionary Objects - Lock Objects
SELECTION-SCREEN POSITION 6.
PARAMETERS p_enqu AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_enqu.
* BSP Library - BSP Applications - Views
SELECTION-SCREEN POSITION 55.
PARAMETERS p_wview AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 59(29) t_wview.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Dictionary Objects - Type Groups
SELECTION-SCREEN POSITION 6.
PARAMETERS p_type AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_type.
* BSP Library - BSP Applications - Pages with Flow Logic
SELECTION-SCREEN POSITION 55.
PARAMETERS p_wbsp AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 59(29) t_wbsp.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Class Library
PARAMETERS p_clslib AS CHECKBOX DEFAULT abap_true
  MODIF ID dis
  USER-COMMAND u_clslib.
SELECTION-SCREEN COMMENT 5(39) t_clslib.
* BSP Library - BSP Applications - Page Fragments
SELECTION-SCREEN POSITION 55.
PARAMETERS p_wincl AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 59(29) t_wincl.

* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Class Library - Classes
SELECTION-SCREEN POSITION 6.
PARAMETERS p_clas AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_clas.
* BSP Library - BSP Applications - MIMEs
SELECTION-SCREEN POSITION 55.
PARAMETERS p_wmime AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 59(29) t_wmime.

* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Class Library - Interfaces
SELECTION-SCREEN POSITION 6.
PARAMETERS p_intf AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_intf.
* BSP Library - BSP Extensions
SELECTION-SCREEN POSITION 50.
PARAMETERS p_bsptag AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 54(34) t_bsptag.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Programs
PARAMETERS p_prog AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 5(39) t_prog.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Function Groups
PARAMETERS p_fugr AS CHECKBOX DEFAULT abap_true
  MODIF ID dis
  USER-COMMAND u_fugr.
SELECTION-SCREEN COMMENT 5(39) t_fugr.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Function Groups - Function Modules
SELECTION-SCREEN POSITION 6.
PARAMETERS p_fuba AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_fuba.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Function Groups - Screens
SELECTION-SCREEN POSITION 6.
PARAMETERS p_scr AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_scr.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Function Groups - Includes
SELECTION-SCREEN POSITION 6.
PARAMETERS p_fuincl AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 10(34) t_fuincl.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
* Includes
PARAMETERS p_incl AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN COMMENT 5(39) t_incl.
* ---
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b3.


*-----------------------------------------------------------------------
* Display a directory picker window
*-----------------------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_folder.

  DATA:
  l_obj_file TYPE REF TO cl_gui_frontend_services,
  l_selected_folder TYPE string,
  l_initial_folder TYPE string,
  l_message TYPE string,
  l_txt TYPE string,
  l_subrc TYPE sysubrc.

  IF sy-batch IS INITIAL.
    PERFORM cl_gui_get_folder
      CHANGING
        l_selected_folder
        l_subrc.

    IF l_subrc = 0.
      p_folder = l_selected_folder.
    ELSE.
      PERFORM get_message_text USING 'EA' '334'
                                   p_folder space space space
                             CHANGING l_message.
      PERFORM decode_html_io
        USING txt_please_enter_a_root_dir
        CHANGING l_txt.
      WRITE: / l_message, / l_txt.
    ENDIF.
  ENDIF.


*-----------------------------------------------------------------------
* at selection-screen
*-----------------------------------------------------------------------
AT SELECTION-SCREEN.

  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      p_bsplib = abap_true.
      p_bspapp = abap_true.
      p_wbsp = abap_true.
      p_wctrl = abap_true.
      p_wincl = abap_true.
      p_wmime = abap_true.
      p_wview = abap_true.
      p_bsptag = abap_true.
*
      p_clslib = abap_true.
      p_clas = abap_true.
      p_intf = abap_true.
*
      p_ddic = abap_true.
      p_doma = abap_true.
      p_dtel = abap_true.
      p_enqu = abap_true.
      p_shlp = abap_true.
      p_struc = abap_true.
      p_tabl = abap_true.
      p_ttyp = abap_true.
      p_type = abap_true.
      p_view = abap_true.
*
      p_fugr = abap_true.
      p_fuba = abap_true.
      p_fuincl = abap_true.
      p_scr = abap_true.
*
      p_incl = abap_true.
*
      p_msag = abap_true.
*
      p_para = abap_true.
*
      p_prog = abap_true.
*
      p_tobj = abap_true.
*
      p_tran = abap_true.
*
      p_xslt = abap_true.
    WHEN 'FC02'.
      p_bsplib = abap_false.
      p_bspapp = abap_false.
      p_wbsp = abap_false.
      p_wctrl = abap_false.
      p_wincl = abap_false.
      p_wmime = abap_false.
      p_wview = abap_false.
      p_bsptag = abap_false.
*
      p_clslib = abap_false.
      p_clas = abap_false.
      p_intf = abap_false.

      p_ddic = abap_false.
      p_doma = abap_false.
      p_dtel = abap_false.
      p_enqu = abap_false.
      p_shlp = abap_false.
      p_struc = abap_false.
      p_tabl = abap_false.
      p_ttyp = abap_false.
      p_type = abap_false.
      p_view = abap_false.
*
      p_fugr = abap_false.
      p_fuba = abap_false.
      p_fuincl = abap_false.
      p_scr = abap_false.
*
      p_incl = abap_false.
*
      p_msag = abap_false.
*
      p_para = abap_false.
*
      p_prog = abap_false.
*
      p_tobj = abap_false.
*
      p_tran = abap_false.
*
      p_xslt = abap_false.
    WHEN 'FC03'.
      PERFORM gui_info_page.
  ENDCASE.
*---------------------------
  CASE sy-ucomm.
    WHEN 'B_DBCLS'.
      PERFORM gui_info_dbcls.
    WHEN 'U_BSPAPP'.
      IF p_bspapp = abap_false.
        p_wbsp = abap_false.
        p_wctrl = abap_false.
        p_wincl = abap_false.
        p_wmime = abap_false.
        p_wview = abap_false.
      ELSE.
        p_wbsp = abap_true.
        p_wctrl = abap_true.
        p_wincl = abap_true.
        p_wmime = abap_true.
        p_wview = abap_true.
      ENDIF.
    WHEN 'U_BSPLIB'.
      IF p_bsplib = abap_false.
        p_bspapp = abap_false.
        p_bsptag = abap_false.
        p_wbsp = abap_false.
        p_wctrl = abap_false.
        p_wincl = abap_false.
        p_wmime = abap_false.
        p_wview = abap_false.
      ELSE.
        p_bspapp = abap_true.
        p_bsptag = abap_true.
        p_wbsp = abap_true.
        p_wctrl = abap_true.
        p_wincl = abap_true.
        p_wmime = abap_true.
        p_wview = abap_true.
      ENDIF.
    WHEN 'U_CLSLIB'.
      IF p_clslib = abap_false.
        p_clas = abap_false.
        p_intf = abap_false.
      ELSE.
        p_clas = abap_true.
        p_intf = abap_true.
      ENDIF.
    WHEN 'U_DBCONT'.
      IF p_dbcont = abap_false.
        p_db_csv = abap_false.
        p_db_xml = abap_false.
        p_dbclsa = abap_false.
        p_dbclsc = abap_false.
        p_dbclsl = abap_false.
        p_dbclsg = abap_false.
        p_dbclse = abap_false.
        p_dbclss = abap_false.
        p_dbclsw = abap_false.
      ELSE.
        p_db_csv = abap_true.
        p_db_xml = abap_true.
        p_dbclsa = abap_true.
        p_dbclsc = abap_true.
        p_dbclsl = abap_true.
        p_dbclsg = abap_true.
        p_dbclse = abap_true.
        p_dbclss = abap_true.
        p_dbclsw = abap_true.
      ENDIF.
    WHEN 'U_DDIC'.
      IF p_ddic = abap_false.
        p_doma = abap_false.
        p_dtel = abap_false.
        p_enqu = abap_false.
        p_shlp = abap_false.
        p_struc = abap_false.
        p_tabl = abap_false.
        p_ttyp = abap_false.
        p_type = abap_false.
        p_view = abap_false.
      ELSE.
        p_doma = abap_true.
        p_dtel = abap_true.
        p_enqu = abap_true.
        p_shlp = abap_true.
        p_struc = abap_true.
        p_tabl = abap_true.
        p_ttyp = abap_true.
        p_type = abap_true.
        p_view = abap_true.
      ENDIF.
    WHEN 'U_FUGR'.
      IF p_fugr = abap_false.
        p_fuba = abap_false.
        p_fuincl = abap_false.
        p_scr = abap_false.
      ELSE.
        p_fuba = abap_true.
        p_fuincl = abap_true.
        p_scr = abap_true.
      ENDIF.
  ENDCASE.


*-----------------------------------------------------------------------
*  at selection-screen OUTPUT
*-----------------------------------------------------------------------
AT SELECTION-SCREEN OUTPUT.
  LOOP AT SCREEN.
* BSP Library
    IF screen-name = 'P_BSPAPP'
    OR screen-name = 'P_BSPTAG'.
      IF p_bsplib = abap_false.
        screen-input = 0.
      ELSE.
        screen-input = 1.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
    IF screen-name = 'P_WBSP'
    OR screen-name = 'P_WCTRL'
    OR screen-name = 'P_WINCL'
    OR screen-name = 'P_WMIME'
    OR screen-name = 'P_WVIEW'.
      IF p_bspapp = abap_false.
        screen-input = 0.
      ELSE.
        screen-input = 1.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
* Class Library
    IF screen-name = 'P_CLAS'
    OR screen-name = 'P_INTF'.
      IF p_clslib = abap_false.
        screen-input = 0.
      ELSE.
        screen-input = 1.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
* Dictionary Objects
    IF screen-name = 'P_DOMA'
    OR screen-name = 'P_DTEL'
    OR screen-name = 'P_ENQU'
    OR screen-name = 'P_SHLP'
    OR screen-name = 'P_STRUC'
    OR screen-name = 'P_TABL'
    OR screen-name = 'P_TTYP'
    OR screen-name = 'P_TYPE'
    OR screen-name = 'P_VIEW'.
      IF p_ddic = abap_false.
        screen-input = 0.
      ELSE.
        screen-input = 1.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
* Function Group
    IF screen-name = 'P_FUBA'
    OR screen-name = 'P_FUINCL'
    OR screen-name = 'P_SCR'.
      IF p_fugr = abap_false.
        screen-input = 0.
      ELSE.
        screen-input = 1.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
* database content
    IF screen-name = 'P_DB_CSV'
    OR screen-name = 'P_DB_XML'
    OR screen-name = 'P_DBCLSA'
    OR screen-name = 'P_DBCLSC'
    OR screen-name = 'P_DBCLSL'
    OR screen-name = 'P_DBCLSG'
    OR screen-name = 'P_DBCLSE'
    OR screen-name = 'P_DBCLSS'
    OR screen-name = 'P_DBCLSW'
    OR screen-name = 'P_DBMAX'
    OR screen-name = 'P_DBLIM-HIGH'
    OR screen-name = 'P_DBLIM-LOW'
    OR screen-name = '%_P_DBLIM_%_APP_%-VALU_PUSH'.
      IF p_dbcont = abap_false.
        screen-input = 0.
      ELSE.
        screen-input = 1.
      ENDIF.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.


*-----------------------------------------------------------------------
*  Initialization
*-----------------------------------------------------------------------
INITIALIZATION.
* load...
  PERFORM csv_tools.

  DATA:
  lt_exclude TYPE TABLE OF sy-ucomm,
  ls_dyntxt TYPE smp_dyntxt,
  ls_fupararef TYPE fupararef,
  l_text TYPE string.

* Remove buttons
  APPEND 'DOCU' TO lt_exclude.
  CALL FUNCTION 'RS_SET_SELSCREEN_STATUS'
    EXPORTING
      p_status  = sy-pfkey
    TABLES
      p_exclude = lt_exclude
    EXCEPTIONS
      OTHERS    = 1.

* button "Select All"
  ls_dyntxt-icon_id = '@4B@'.
  ls_dyntxt-quickinfo = txt_select_all.
  sscrfields-functxt_01 = ls_dyntxt.
* button "Deselect All"
  ls_dyntxt-icon_id = '@4D@'.
  ls_dyntxt-quickinfo = txt_deselect_all.
  sscrfields-functxt_02 = ls_dyntxt.
* button "Information"
  ls_dyntxt-icon_id = '@0S@'.
  ls_dyntxt-quickinfo = txt_information.
  sscrfields-functxt_03 = ls_dyntxt.

  b_dbcls = '@0S@'.

  PERFORM decode_html_io USING txt_source_code      CHANGING t_add_sc.
  PERFORM decode_html_io USING txt_variants_of_reports
      CHANGING t_add_rv.
  PERFORM decode_html_io USING txt_bsp_applications CHANGING t_bspapp.
  PERFORM decode_html_io USING txt_bsp_library      CHANGING t_bsplib.
  PERFORM decode_html_io USING txt_bsp_extensions   CHANGING t_bsptag.
  PERFORM decode_html_io USING txt_selection        CHANGING t_choice.
  PERFORM decode_html_io USING txt_classes          CHANGING t_clas.
  PERFORM decode_html_io USING txt_class_library    CHANGING t_clslib.
  t_db_csv = gc_extension_csv.
  t_db_xml = gc_extension_xml.
  PERFORM decode_html_io USING txt_database_content CHANGING t_dbcont.
  PERFORM decode_html_io USING txt_format           CHANGING t_dbform.
  PERFORM decode_html_io USING txt_restrict         CHANGING t_dblim.
  PERFORM decode_html_io USING txt_max_no_of_lines  CHANGING t_dbmax.
  PERFORM decode_html_io USING txt_delivery_class   CHANGING t_dbcls.
  t_dbclsa = 'A'.
  t_dbclsc = 'C'.
  t_dbclsl = 'L'.
  t_dbclsg = 'G'.
  t_dbclse = 'E'.
  t_dbclss = 'S'.
  t_dbclsw = 'W'.
  PERFORM decode_html_io USING txt_dict_objs        CHANGING t_ddic.
  PERFORM decode_html_io USING txt_domains          CHANGING t_doma.
  PERFORM decode_html_io USING txt_data_elements    CHANGING t_dtel.
  PERFORM decode_html_io USING txt_objects          CHANGING t_elems.
  PERFORM decode_html_io USING txt_lock_objects     CHANGING t_enqu.
  PERFORM decode_html_io USING txt_empty_tab        CHANGING t_etab.
  PERFORM decode_html_io USING txt_disabled         CHANGING t_etab_d.
  PERFORM decode_html_io USING txt_hidden           CHANGING t_etab_h.
  PERFORM decode_html_io USING txt_display          CHANGING t_etab_n.
  PERFORM decode_html_io USING txt_function_modules CHANGING t_fuba.
  PERFORM decode_html_io USING txt_function_groups  CHANGING t_fugr.
  PERFORM decode_html_io USING txt_includes         CHANGING t_fuincl.
  PERFORM decode_html_io USING txt_includes         CHANGING t_incl.
  PERFORM decode_html_io USING txt_interfaces       CHANGING t_intf.
  PERFORM decode_html_io USING txt_message_classes  CHANGING t_msag.
  PERFORM decode_html_io USING txt_options          CHANGING t_opts.
  PERFORM decode_html_io USING txt_package          CHANGING t_pack.
  PERFORM decode_html_io USING txt_set_get_parameters
      CHANGING t_para.
  PERFORM decode_html_io USING txt_directory        CHANGING t_path.
  PERFORM decode_html_io USING txt_programs         CHANGING t_prog.
  PERFORM decode_html_io USING txt_screens          CHANGING t_scr.
  PERFORM decode_html_io USING txt_srch_helps       CHANGING t_shlp.
  PERFORM decode_html_io USING txt_structures       CHANGING t_struc.
  PERFORM decode_html_io USING txt_database_tables  CHANGING t_tabl.
  PERFORM decode_html_io USING txt_authorization_object___2
      CHANGING t_tobj.
  PERFORM decode_html_io USING txt_transactions     CHANGING t_tran.
  PERFORM decode_html_io USING txt_table_types      CHANGING t_ttyp.
  PERFORM decode_html_io USING txt_type_grps        CHANGING t_type.
  PERFORM decode_html_io USING txt_views            CHANGING t_view.
  PERFORM decode_html_io USING txt_pages_with_flow_logic
      CHANGING t_wbsp.
  PERFORM decode_html_io USING txt_controller       CHANGING t_wctrl.
  PERFORM decode_html_io USING txt_page_fragments   CHANGING t_wincl.
  PERFORM decode_html_io USING txt_mimes            CHANGING t_wmime.
  PERFORM decode_html_io USING txt_views            CHANGING t_wview.
  PERFORM decode_html_io USING txt_transformations  CHANGING t_xslt.

  SELECT SINGLE * FROM fupararef INTO ls_fupararef
    WHERE funcname = 'GUI_DOWNLOAD'
    AND r3state = 'A'
    AND parameter = 'SHOW_TRANSFER_STATUS'.
  IF sy-subrc = 0.
    g_has_download_status = abap_true.
  ENDIF.


*-----------------------------------------------------------------------
* start-of-selection
*-----------------------------------------------------------------------
START-OF-SELECTION.
  DATA:
  l_dir TYPE string,
  l_dir_check TYPE flag,
  l_dir_rc TYPE i,
  l_message TYPE string,
  l_txt TYPE string,
  lt_tadir TYPE STANDARD TABLE OF tadir,
  l_tabname TYPE tabname,
  ls_contflag TYPE st_contflag_range,
  lt_contflag TYPE it_contflag_range.

  FIELD-SYMBOLS:
  <ls_tadir> TYPE tadir.

  CLEAR:
  g_folder,
  g_pack.

  REFRESH:
  gt_tadir.


  IF p_devcl IS INITIAL.
    PERFORM decode_html_io
      USING txt_enter_a_package
      CHANGING l_txt.
    WRITE / l_txt.
  ELSEIF p_folder IS INITIAL.
    PERFORM decode_html_io
      USING txt_please_enter_a_root_dir
      CHANGING l_txt.
    WRITE / l_txt.
  ELSE.
*   block3
    g_add_elem_ddic       = p_ddic.
    g_add_elem_tabl       = p_tabl.
    g_add_elem_view       = p_view.
    g_add_elem_ttyp       = p_ttyp.
    g_add_elem_struc      = p_struc.
    g_add_elem_dtel       = p_dtel.
    g_add_elem_doma       = p_doma.
    g_add_elem_shlp       = p_shlp.
    g_add_elem_enqu       = p_enqu.
    g_add_elem_type       = p_type.
    g_add_elem_clslib     = p_clslib.
    g_add_elem_clas       = p_clas.
    g_add_elem_intf       = p_intf.
    g_add_elem_prog       = p_prog.
    g_add_elem_fugr       = p_fugr.
    g_add_elem_fuba       = p_fuba.
    g_add_elem_msag       = p_msag.
    g_add_elem_scr        = p_scr.
    g_add_elem_fuincl     = p_fuincl.
    g_add_elem_incl       = p_incl.
    g_add_elem_o2appl     = p_bspapp.
    g_add_elem_o2applbsp  = p_wbsp.
    g_add_elem_o2applctrl = p_wctrl.
    g_add_elem_o2applincl = p_wincl.
    g_add_elem_o2applmime = p_wmime.
    g_add_elem_o2applview = p_wview.
    g_add_elem_o2taglib   = p_bsptag.
    g_add_elem_para       = p_para.
    g_add_elem_tobj       = p_tobj.
    g_add_elem_tran       = p_tran.
    g_add_elem_xslt       = p_xslt.
*   block2
    g_add_sourcecode = p_add_sc.
    CASE abap_true.
      WHEN p_etab_n.
        g_empty_tab = gc_empty_tab_display.
      WHEN p_etab_d.
        g_empty_tab = gc_empty_tab_disable.
      WHEN p_etab_h.
        g_empty_tab = gc_empty_tab_hide.
    ENDCASE.
    g_add_db_content = p_dbcont.
    g_add_db_format_csv = p_db_csv.
    g_add_db_format_xml = p_db_xml.
    g_add_db_max_lines = p_dbmax.
    ls_contflag-sign = 'I'.
    ls_contflag-option = 'EQ'.
    IF p_dbclsa = abap_true.
      ls_contflag-low = 'A'.
      APPEND ls_contflag TO lt_contflag.
    ENDIF.
    IF p_dbclsc = abap_true.
      ls_contflag-low = 'C'.
      APPEND ls_contflag TO lt_contflag.
    ENDIF.
    IF p_dbclse = abap_true.
      ls_contflag-low = 'E'.
      APPEND ls_contflag TO lt_contflag.
    ENDIF.
    IF p_dbclsg = abap_true.
      ls_contflag-low = 'G'.
      APPEND ls_contflag TO lt_contflag.
    ENDIF.
    IF p_dbclsl = abap_true.
      ls_contflag-low = 'L'.
      APPEND ls_contflag TO lt_contflag.
    ENDIF.
    IF p_dbclss = abap_true.
      ls_contflag-low = 'S'.
      APPEND ls_contflag TO lt_contflag.
    ENDIF.
    IF p_dbclsw = abap_true.
      ls_contflag-low = 'W'.
      APPEND ls_contflag TO lt_contflag.
    ENDIF.
    IF g_add_db_content = abap_true
    AND NOT lt_contflag IS INITIAL.
      IF NOT p_dblim IS INITIAL.
        SELECT * FROM tadir INTO TABLE lt_tadir
            WHERE pgmid = 'R3TR'
            AND object = 'TABL'
            AND obj_name IN p_dblim
            AND devclass IN p_devcl.
      ELSE.
        SELECT * FROM tadir INTO TABLE lt_tadir
            WHERE pgmid = 'R3TR'
            AND object = 'TABL'
            AND devclass IN p_devcl.
      ENDIF.
      LOOP AT lt_tadir ASSIGNING <ls_tadir>.
        l_tabname = <ls_tadir>-obj_name.
        SELECT SINGLE tabname FROM dd02l INTO l_tabname
            WHERE as4local = 'A'
            AND tabclass = 'TRANSP'
            AND tabname = l_tabname
            AND contflag IN lt_contflag.
        IF sy-subrc = 0.
          APPEND <ls_tadir> TO gt_tadir.
        ENDIF.
      ENDLOOP.
      REFRESH lt_tadir.
      REFRESH lt_contflag.
    ENDIF.
    g_add_report_variants = p_add_rv.
*   block 1
    l_dir = p_folder.
    CALL METHOD cl_gui_frontend_services=>directory_exist
      EXPORTING
        directory = l_dir
      RECEIVING
        result    = l_dir_check
      EXCEPTIONS
        OTHERS    = 1.
    IF sy-subrc = 0 AND l_dir_check = abap_false.
      CALL METHOD cl_gui_frontend_services=>directory_create
        EXPORTING
          directory = l_dir
        CHANGING
          rc        = l_dir_rc
        EXCEPTIONS
          OTHERS    = 1.
      IF sy-subrc = 0 AND l_dir_rc = 0.
        g_folder = p_folder.
      ENDIF.
    ELSEIF sy-subrc = 0.
      g_folder = p_folder.
    ENDIF.
    IF g_folder IS INITIAL.
      CLEAR l_message.
      PERFORM get_message_text
        USING 'EA' '334' p_folder space space space
        CHANGING l_message.
      PERFORM decode_html_io
        USING txt_please_enter_a_valid_path
        CHANGING l_txt.
      WRITE: / l_message, / l_txt.
    ELSE.
      SELECT * FROM tdevc INTO TABLE gt_tdevc
          WHERE devclass IN p_devcl.
      IF sy-subrc <> 0.
        CLEAR l_message.
        DO.
          IF p_devcl-low NA '%'.
            EXIT.
          ENDIF.
          PERFORM replace_all
            USING '%' '*'
            CHANGING p_devcl-low.
        ENDDO.
        PERFORM get_message_text
          USING 'PACKAGE_BUILDER01' '411' p_devcl-low
            space space space
          CHANGING l_message.
        PERFORM decode_html_io
          USING txt_please_enter_a_root_dir
          CHANGING l_txt.
        WRITE: / l_message, / l_txt.
      ENDIF.
    ENDIF.
  ENDIF.

END-OF-SELECTION.


*-----------------------------------------------------------------------
  IF NOT gt_tdevc IS INITIAL AND NOT g_folder IS INITIAL.
    LOOP AT gt_tdevc INTO gs_tdevc.
      g_pack = gs_tdevc-devclass.
      PERFORM init.

      PERFORM select.
      PERFORM html_base.

      PERFORM optionals.
      PERFORM system.
    ENDLOOP.

    PERFORM decode_html_io
      USING txt_completed
      CHANGING l_txt.
    WRITE l_txt.
  ENDIF.


*-----------------------------------------------------------------------
* gui_info_dbcls
*-----------------------------------------------------------------------
FORM gui_info_dbcls.

  DATA:
  lt_type TYPE it_dom_value,
  ls_hinfo TYPE help_info,
*  ls_oheader type thead,
  ls_exclfun TYPE hlpfcode,
  lt_exclfun TYPE STANDARD TABLE OF hlpfcode,
  ls_hline TYPE tline,
  lt_hline TYPE STANDARD TABLE OF tline.

  FIELD-SYMBOLS:
  <ls_type> TYPE st_dom_value.

  PERFORM get_dom_value_texts
    USING 'CONTFLAG'
    CHANGING lt_type.

  ls_hline-tdformat = 'U1'.
  ls_hline-tdline = txt_delivery_class.
  APPEND ls_hline TO lt_hline.

  SORT lt_type BY value.
  LOOP AT lt_type ASSIGNING <ls_type>.
    ls_hline-tdformat = 'B1'.
    CONCATENATE '<ZK>' <ls_type>-value '</>:'
        INTO ls_hline-tdline.
    CONCATENATE ls_hline-tdline <ls_type>-text
        INTO ls_hline-tdline SEPARATED BY space.
    APPEND ls_hline TO lt_hline.
  ENDLOOP.

  CALL FUNCTION 'HELP_DOCULINES_SHOW'
    EXPORTING
*      cucol = 10
*      curow = 3
      help_infos = ls_hinfo
*      linenr = 1
*      not_help = abap_false
*      overlay_header = ls_oheader
*      suppress_viewer = abap_false
*      classic_sapscript = abap_false
*    importing
*      help_popup_cancel =
    TABLES
      excludefun = lt_exclfun
      helplines = lt_hline.

ENDFORM.                    "gui_info_dbcls


*-----------------------------------------------------------------------
* gui_info_page
*-----------------------------------------------------------------------
FORM gui_info_page.

  DATA:
  lt_type TYPE it_dom_value,
  ls_hinfo TYPE help_info,
*  ls_oheader type thead,
  ls_exclfun TYPE hlpfcode,
  lt_exclfun TYPE STANDARD TABLE OF hlpfcode,
  ls_hline TYPE tline,
  lt_hline TYPE STANDARD TABLE OF tline.

  ls_hline-tdformat = 'U1'.
  ls_hline-tdline =
      '&#x53;&#x6F;&#x66;&#x74;&#x43;&#x6F;&#x70;&#x79;'.
  PERFORM decode_html CHANGING ls_hline-tdline.
  APPEND ls_hline TO lt_hline.

  ls_hline-tdformat = 'AS'.
  CONCATENATE '<ZK>' txt_version '</>:' INTO ls_hline-tdline.
  CONCATENATE ls_hline-tdline gc_version
      INTO ls_hline-tdline SEPARATED BY space.
  PERFORM decode_html CHANGING ls_hline-tdline.
  APPEND ls_hline TO lt_hline.

  ls_hline-tdformat = '*'.
  CONCATENATE '&#xA9; 2008-' gc_version+0(4) ' globalBIT, LLC.'
      INTO ls_hline-tdline.
  PERFORM decode_html CHANGING ls_hline-tdline.
  APPEND ls_hline TO lt_hline.

  ls_hline-tdformat = '/'.
  ls_hline-tdline = txt_all_rights_reserved.
  PERFORM decode_html CHANGING ls_hline-tdline.
  APPEND ls_hline TO lt_hline.

  ls_hline-tdformat = 'AS'.
  ls_hline-tdline = txt_product_under_gpl.
  PERFORM replace_single
    USING '#GPL#' 'GNU General Public License'
    CHANGING ls_hline-tdline.
  PERFORM decode_html CHANGING ls_hline-tdline.
  APPEND ls_hline TO lt_hline.

  CALL FUNCTION 'HELP_DOCULINES_SHOW'
    EXPORTING
*      cucol = 10
*      curow = 3
      help_infos = ls_hinfo
*      linenr = 1
*      not_help = abap_false
*      overlay_header = ls_oheader
*      suppress_viewer = abap_false
*      classic_sapscript = abap_false
*    importing
*      help_popup_cancel =
    TABLES
      excludefun = lt_exclfun
      helplines = lt_hline.

ENDFORM.                    "gui_info_page
*&---------------------------------------------------------------------*
*&  Include           ZUTIL_CMD_REPLACE                                *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& This file is part of ZUTIL.                                         *
*&                                                                     *
*& ZUTIL 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.                                               *
*&                                                                     *
*& ZUTIL 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 ZUTIL. If not, see <http://www.gnu.org/licenses/>.       *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&  Author:     Ruediger von Creytz     ruediger.creytz@globalbit.net  *
*&  Copyright:  globalBIT, LLC          http://www.globalbit.net       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* replace_all
*-----------------------------------------------------------------------
FORM replace_all
  USING
    value(i_old)
    value(i_new)
  CHANGING
    c_str TYPE any.

  REPLACE ALL OCCURRENCES OF i_old IN c_str WITH i_new.

ENDFORM.                    "replace_all


*-----------------------------------------------------------------------
* replace_single
*-----------------------------------------------------------------------
FORM replace_single
  USING
    value(i_old)
    value(i_new)
  CHANGING
    c_str TYPE any.

  REPLACE i_old IN c_str WITH i_new.

ENDFORM.                    "replace_single
*&---------------------------------------------------------------------*
*&  Include           ZUTIL_CONVERT_NUMBER                             *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& This file is part of ZUTIL.                                         *
*&                                                                     *
*& ZUTIL 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.                                               *
*&                                                                     *
*& ZUTIL 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 ZUTIL. If not, see <http://www.gnu.org/licenses/>.       *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&  Author:     Ruediger von Creytz     ruediger.creytz@globalbit.net  *
*&  Copyright:  globalBIT, LLC          http://www.globalbit.net       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* number_to_x_char
*-----------------------------------------------------------------------
FORM number_to_x_char
  USING
    i_num TYPE i
  CHANGING
    c_char TYPE c.

  DATA:
  l_num TYPE i.

  CONSTANTS:
  lc_chars(26) TYPE c VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.

  CLEAR c_char.

  IF i_num < 10.
    c_char = i_num.
  ELSEIF i_num < 36.
    l_num = i_num - 10.
    c_char = lc_chars+l_num(1).
  ENDIF.
ENDFORM.                    "number_to_x_char


*-----------------------------------------------------------------------
* number_to_hex_string
*-----------------------------------------------------------------------
FORM number_to_hex_string
  USING
    i_num TYPE any
  CHANGING
    c_hex TYPE string.

  PERFORM number_to_x_string
    USING
      i_num
      16
    CHANGING
      c_hex.

ENDFORM.                    "number_to_hex_string


*-----------------------------------------------------------------------
* number_to_x_string
*-----------------------------------------------------------------------
FORM number_to_x_string
  USING
    i_num TYPE any
    i_number_system TYPE i
  CHANGING
    c_hex TYPE string.

  DATA:
  l_num TYPE i,
  l_cal TYPE i VALUE 1,
  l_cnt TYPE i,
  l_hex_char TYPE c.

  CLEAR c_hex.
  l_num = i_num.

  IF l_num = 0.
    c_hex = '0'.
  ELSE.
    DO.
      l_cnt = 0.
      IF l_cal <= l_num.
        l_cal = l_cal * i_number_system.
      ENDIF.
      IF l_cal > l_num.
        l_cal = l_cal / i_number_system.
        DO.
          IF l_cal <= l_num.
            l_num = l_num - l_cal.
            l_cnt = l_cnt + 1.
          ELSE.
            EXIT.
          ENDIF.
        ENDDO.
        PERFORM number_to_x_char
          USING l_cnt
          CHANGING l_hex_char.
        CONCATENATE c_hex l_hex_char INTO c_hex.
      ENDIF.
      IF l_num = 0 AND l_cal = 1.
        EXIT.
      ENDIF.
    ENDDO.
  ENDIF.
ENDFORM.                    "number_to_hex_string
*&---------------------------------------------------------------------*
*&  Include           ZUTIL_CONVERT_TEXT                               *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& This file is part of ZUTIL.                                         *
*&                                                                     *
*& ZUTIL 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.                                               *
*&                                                                     *
*& ZUTIL 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 ZUTIL. If not, see <http://www.gnu.org/licenses/>.       *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&  Author:     Ruediger von Creytz     ruediger.creytz@globalbit.net  *
*&  Copyright:  globalBIT, LLC          http://www.globalbit.net       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* decode_html
*-----------------------------------------------------------------------
FORM decode_html
  CHANGING
    c_txt TYPE any.

  DATA:
  l_xstr TYPE xstring,
  l_hex TYPE string,
  l_xpos TYPE i,
  l_str TYPE string,
  l_fdpos TYPE i,
  l_strlen TYPE i,
  l_out TYPE string,
  l_outlen TYPE i,
  l_char TYPE string.

  CHECK NOT c_txt IS INITIAL.
  CHECK c_txt CS '&#x'.

  l_str = c_txt.

  DO.
    IF l_str CS '&#x'.
      l_fdpos = sy-fdpos.
      IF l_fdpos > 0.
        CONCATENATE l_out+0(l_outlen) l_str+0(l_fdpos) INTO l_out.
        l_outlen = l_outlen + l_fdpos.
      ENDIF.
      l_xpos = l_fdpos + 3.
      l_strlen = strlen( l_str ).
      l_strlen = l_strlen - l_xpos.
      l_str = l_str+l_xpos(l_strlen).
      SPLIT l_str AT ';' INTO l_hex l_str.
      l_xstr = l_hex.

      CALL FUNCTION 'NLS_STRING_CONVERT_TO_SYS'
        EXPORTING
          lang_used = sy-langu
          SOURCE    = l_xstr
        IMPORTING
          RESULT    = l_char
        EXCEPTIONS
          OTHERS    = 1.
      IF sy-subrc = 0.
        CONCATENATE l_out+0(l_outlen) l_char+0(1) INTO l_out.
      ELSE.
        CONCATENATE l_out+0(l_outlen) '#' INTO l_out.
      ENDIF.
      l_outlen = l_outlen + 1.
    ELSE.
      EXIT.
    ENDIF.
  ENDDO.

  l_strlen = strlen( l_str ).
  CONCATENATE l_out+0(l_outlen) l_str+0(l_strlen) INTO l_out.
  c_txt = l_out.
ENDFORM.                    "decode_html


*-----------------------------------------------------------------------
* decode_html_io
*-----------------------------------------------------------------------
FORM decode_html_io
  USING
    i_html TYPE string
  CHANGING
    c_txt TYPE any.

  c_txt = i_html.

  PERFORM decode_html
    CHANGING
      c_txt.

ENDFORM.                    "decode_html_io


*-----------------------------------------------------------------------
* encode_html
*-----------------------------------------------------------------------
FORM encode_html
  CHANGING
    c_txt TYPE string.

  CHECK NOT c_txt IS INITIAL.
  CHECK c_txt NS '&#'.

  PERFORM encode_html_force
    CHANGING c_txt.

ENDFORM.                    "encode_html


*-----------------------------------------------------------------------
* encode_html_force
*-----------------------------------------------------------------------
FORM encode_html_force
  CHANGING
    c_txt TYPE string.

  DATA:
  l_xstr TYPE xstring,
  l_hex TYPE string,
  l_hexlen TYPE i,
  l_xlen TYPE i,
  l_xpos TYPE i,
  l_str TYPE string,
  l_strlen TYPE i,
  l_out TYPE string,
  l_outlen TYPE i,
  l_pos TYPE i,
  l_chars(255) TYPE c,
  l_xchar(4) TYPE c.


  CHECK NOT c_txt IS INITIAL.

  CONCATENATE         "characters not to encode
    ' :;,./()-_+*#='
    '0123456789'
    'abcdefghijklmnopqrstuvwxyz'
    'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    INTO l_chars.

  l_str = c_txt.


  CALL FUNCTION 'NLS_STRING_CONVERT_FROM_SYS'
    EXPORTING
      lang_used = sy-langu
      SOURCE    = l_str
    IMPORTING
      RESULT    = l_xstr.

  l_hex = l_xstr.
  l_hexlen = strlen( l_hex ).
  l_strlen = strlen( l_str ).
  l_xlen = l_hexlen / l_strlen.

  DO.
    l_xpos = l_pos * l_xlen.
    l_xchar = l_hex+l_xpos(l_xlen).
    IF l_chars NA l_str+l_pos(1)
    AND NOT l_xchar = '23'.
      IF l_outlen = 0.
        CONCATENATE '&#x' l_xchar ';' INTO l_out.
      ELSE.
        CONCATENATE l_out+0(l_outlen) '&#x' l_xchar ';'
          INTO l_out.
      ENDIF.
      l_outlen = l_outlen + 4 + l_xlen.
    ELSE.
      IF l_outlen = 0.
        l_out = l_str+l_pos(1).
      ELSE.
        CONCATENATE l_out+0(l_outlen) l_str+l_pos(1) INTO l_out.
      ENDIF.
      l_outlen = l_outlen + 1.
    ENDIF.

    l_pos = l_pos + 1.
    l_strlen = strlen( l_str ).
    IF l_pos = l_strlen.
      EXIT.
    ENDIF.
  ENDDO.

  c_txt = l_out.
ENDFORM.                    "encode_html_force


*-----------------------------------------------------------------------
* form: encode_uri
*-----------------------------------------------------------------------
FORM encode_uri
  CHANGING
    c_url TYPE string.

  DATA:
  l_prot TYPE string,
  l_url TYPE string,
  l_params TYPE string,
  lt_param TYPE it_string,
  l_key TYPE string,
  l_value TYPE string,
  l_len TYPE i.

  FIELD-SYMBOLS:
  <l_param> TYPE string.

  CHECK NOT c_url IS INITIAL.

  IF c_url CA '?' OR c_url NA '='.
    SPLIT c_url AT '?' INTO l_url l_params.
    IF l_url CA ':'.
      SPLIT l_url AT ':' INTO l_prot l_url.
    ENDIF.
    PERFORM encode_uri_link CHANGING l_url.
    IF NOT l_prot IS INITIAL.
      CONCATENATE l_prot ':' l_url INTO l_url.
    ENDIF.
    CONCATENATE l_url '?' INTO l_url.
  ELSEIF c_url CA '='.
    l_params = c_url.
  ENDIF.

  SPLIT l_params AT '&' INTO TABLE lt_param.
  LOOP AT lt_param ASSIGNING <l_param>.
    CLEAR: l_key, l_value.
    SPLIT <l_param> AT '=' INTO l_key l_value.
    PERFORM encode_uri_value CHANGING l_value.
    CONCATENATE l_url l_key '=' l_value '&' INTO l_url.
  ENDLOOP.

  l_len = strlen( l_url ).
  l_len = l_len - 1. "remove last '&'
  c_url = l_url+0(l_len).
ENDFORM.                    "encode_uri


*-----------------------------------------------------------------------
* form: encode_uri_link
*-----------------------------------------------------------------------
FORM encode_uri_link
  CHANGING
    c_value TYPE string.

  DATA:
  l_chars(66) TYPE c.

  CHECK NOT c_value IS INITIAL.

  CONCATENATE         "characters not to encode
    '/_-.'
    '0123456789'
    'abcdefghijklmnopqrstuvwxyz'
    'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    INTO l_chars.

  PERFORM encode_uri_string
    USING l_chars
    CHANGING c_value.

ENDFORM.                    "encode_uri_link


*-----------------------------------------------------------------------
* form: encode_uri_string
*-----------------------------------------------------------------------
FORM encode_uri_string
  USING
    value(i_chars)
  CHANGING
    c_value TYPE string.

  DATA:
  l_xstr TYPE xstring,
  l_hex TYPE string,
  l_hexlen TYPE i,
  l_chex TYPE string,
  l_chex_pos TYPE i,
  l_xlen TYPE i,
  l_xpos TYPE i,
  l_str TYPE string,
  l_strlen TYPE i,
  l_out TYPE string,
  l_outlen TYPE i,
  l_pos TYPE i.

  CHECK NOT c_value IS INITIAL.

  l_str = c_value.


  CALL FUNCTION 'NLS_STRING_CONVERT_FROM_SYS'
    EXPORTING
      lang_used = sy-langu
      SOURCE    = l_str
    IMPORTING
      RESULT    = l_xstr.

  l_hex = l_xstr.
  l_hexlen = strlen( l_hex ).
  l_strlen = strlen( l_str ).
  l_xlen = l_hexlen / l_strlen.

  DO.
    IF i_chars NA l_str+l_pos(1).
      l_xpos = l_pos * l_xlen.
      l_chex = l_hex+l_xpos(l_xlen).
      l_chex_pos = strlen( l_chex ).
      l_chex_pos = l_chex_pos - 2.
      l_chex = l_chex+l_chex_pos(2).
      IF l_outlen = 0.
        CONCATENATE '%' l_chex INTO l_out.
      ELSE.
        CONCATENATE l_out+0(l_outlen) '%' l_chex
          INTO l_out.
      ENDIF.
      l_outlen = l_outlen + 3.
    ELSE.
      IF l_outlen = 0.
        l_out = l_str+l_pos(1).
      ELSE.
        CONCATENATE l_out+0(l_outlen) l_str+l_pos(1) INTO l_out.
      ENDIF.
      l_outlen = l_outlen + 1.
    ENDIF.

    l_pos = l_pos + 1.
    l_strlen = strlen( l_str ).
    IF l_pos = l_strlen.
      EXIT.
    ENDIF.
  ENDDO.

  c_value = l_out.
ENDFORM.                    "encode_uri_string


*-----------------------------------------------------------------------
* form: encode_uri_value
*-----------------------------------------------------------------------
FORM encode_uri_value
  CHANGING
    c_value TYPE string.

  DATA:
  l_chars(62) TYPE c.

  CHECK NOT c_value IS INITIAL.

  CONCATENATE         "characters not to encode
    '0123456789'
    'abcdefghijklmnopqrstuvwxyz'
    'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    INTO l_chars.

  PERFORM encode_uri_string
    USING l_chars
    CHANGING c_value.

ENDFORM.                    "encode_uri_value
*&---------------------------------------------------------------------*
*&  Include           ZUTIL_SRC_COMPRESS                               *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& This file is part of ZUTIL.                                         *
*&                                                                     *
*& ZUTIL 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.                                               *
*&                                                                     *
*& ZUTIL 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 ZUTIL. If not, see <http://www.gnu.org/licenses/>.       *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&  Author:     Ruediger von Creytz     ruediger.creytz@globalbit.net  *
*&  Copyright:  globalBIT, LLC          http://www.globalbit.net       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* get_src_compressed
*-----------------------------------------------------------------------
FORM get_src_compressed
  USING
    it_src TYPE table
    value(i_compress_better) TYPE flag
  CHANGING
    ct_compressed TYPE table.

  DATA:
  ls_src TYPE string,
  l_is_header TYPE flag VALUE abap_true,
  l_length TYPE i,
  l_pos TYPE i,
  l_is_string TYPE flag,
  l_chars(72) TYPE c,
  l_str TYPE string,
  l_str2 TYPE string,
  l_srclen TYPE i,
  l_strlen TYPE i,
  l_line TYPE string,
  l_linelen TYPE i.

  REFRESH ct_compressed.

* drop header for better compression
  IF i_compress_better = abap_true.
    l_is_header = abap_false.
  ENDIF.

  LOOP AT it_src INTO ls_src.
* drop empty rows
    IF ls_src IS INITIAL.
      l_is_header = abap_false.
      CONTINUE.
    ENDIF.
* drop comments if not head information
    IF ls_src+0(1) = '*'.
      IF l_is_header = abap_true.
        APPEND ls_src TO ct_compressed.
      ENDIF.
      CONTINUE.
    ENDIF.
* remove comments from row
    IF ls_src CA '"'.
      PERFORM split_src_string
        USING
          ls_src
          '"'
        CHANGING
          l_str
          l_str2.
      ls_src = l_str.
    ENDIF.
* condense line
    PERFORM get_src_line_compressed
      CHANGING ls_src.
* add line
    IF NOT l_line IS INITIAL.
      l_srclen = strlen( ls_src ).
      l_linelen = strlen( l_line ).
      l_length = l_srclen + l_linelen.
      IF l_length < 71.
        CONCATENATE l_line ls_src INTO l_line SEPARATED BY space.
        CONTINUE.
      ELSE.
        DO.
          PERFORM split_src_string
            USING
              ls_src
              space
            CHANGING
              l_str
              l_str2.
          l_strlen = strlen( l_str ).
          l_linelen = strlen( l_line ).
          l_length = l_strlen + l_linelen.
          IF l_length < 71.
            CONCATENATE l_line l_str INTO l_line
                SEPARATED BY space.
            IF NOT l_str2 IS INITIAL AND l_str2+0(1) = '*'.
              CLEAR l_chars.
              CLEAR ls_src.
              l_chars+1 = l_str2.
              ls_src = l_chars.
            ELSE.
              ls_src = l_str2.
            ENDIF.
          ELSE.
            EXIT.
          ENDIF.
          IF ls_src IS INITIAL.
            EXIT.
          ENDIF.
        ENDDO.
      ENDIF.
    ENDIF.
    IF NOT l_line IS INITIAL.
      APPEND l_line TO ct_compressed.
    ENDIF.
    l_line = ls_src.
    l_is_header = abap_false.
  ENDLOOP.
  IF NOT l_line IS INITIAL.
    APPEND l_line TO ct_compressed.
  ENDIF.

ENDFORM.                    "get_src_compressed


*-----------------------------------------------------------------------
* get_src_line_compressed
*-----------------------------------------------------------------------
FORM get_src_line_compressed
  CHANGING
    c_line TYPE string.

  DATA:
  l_str TYPE string,
  l_str1 TYPE string,
  l_str2 TYPE string,
  l_line_new TYPE string.

  l_str = c_line.

  DO.
    PERFORM split_src_string
      USING
        l_str
        space
      CHANGING
        l_str1
        l_str2.

    IF l_line_new IS INITIAL.
      l_line_new = l_str1.
    ELSE.
      CONCATENATE l_line_new l_str1 INTO l_line_new SEPARATED BY space.
    ENDIF.

    IF l_str2 IS INITIAL.
      EXIT.
    ENDIF.
    l_str = l_str2.
  ENDDO.

  c_line = l_line_new.

ENDFORM.                    "get_src_line_compressed


*-----------------------------------------------------------------------
* split_src_string
*-----------------------------------------------------------------------
FORM split_src_string
  USING
    value(i_src) TYPE string
    value(i_sep) TYPE char1
  CHANGING
    c_str1 TYPE string
    c_str2 TYPE string.

  DATA:
  l_src TYPE string,
  l_is_string TYPE flag VALUE abap_false,
  l_pos TYPE i VALUE 0,
  l_char TYPE char1,
  l_srclen TYPE i.


  CLEAR:
  c_str1,
  c_str2.

  l_src = i_src.

  SHIFT l_src LEFT DELETING LEADING space.

  SPLIT l_src AT i_sep INTO c_str1 c_str2.

  IF c_str1 CA '''' AND c_str2 CA ''''.
    CLEAR: c_str1, c_str2.
    l_srclen = strlen( l_src ).
    DO.
      l_char = l_src+l_pos(1).
      CONDENSE l_char.
      CASE l_char.
        WHEN ''''.
          IF l_is_string = abap_true.
            l_is_string = abap_false.
          ELSE.
            l_is_string = abap_true.
          ENDIF.
        WHEN i_sep.
          IF l_is_string = abap_false.
            c_str1 = l_src+0(l_pos).
            ADD 1 TO l_pos.
            c_str2 = l_src+l_pos.
            EXIT.
          ENDIF.
      ENDCASE.
      ADD 1 TO l_pos.
      IF l_pos = l_srclen.
        c_str1 = l_src.
        EXIT.
      ENDIF.
    ENDDO.
  ENDIF.

  SHIFT c_str2 LEFT DELETING LEADING space.
  IF c_str1 NA ''''.
    CONDENSE c_str1.
  ENDIF.
  IF c_str2 NA ''''.
    CONDENSE c_str2.
  ENDIF.

ENDFORM.                    "split_src_string
*&---------------------------------------------------------------------*
*&  Include           ZUTIL_SRC_WITHOUT_INCLUDES                       *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& This file is part of ZUTIL.                                         *
*&                                                                     *
*& ZUTIL 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.                                               *
*&                                                                     *
*& ZUTIL 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 ZUTIL. If not, see <http://www.gnu.org/licenses/>.       *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&  Author:     Ruediger von Creytz     ruediger.creytz@globalbit.net  *
*&  Copyright:  globalBIT, LLC          http://www.globalbit.net       *
*&                                                                     *
*&---------------------------------------------------------------------*


TYPES:
  BEGIN OF st_level,
    level TYPE syindex,
  END OF st_level,
  it_level TYPE STANDARD TABLE OF st_level,
  BEGIN OF st_offset,
    index  typE syindex,
    length typE syindex,
  END OF st_offset,
  it_offset type standard table of st_offset,
  BEGIN OF st_src_include_index,
    include   TYPE progname,
    line_from TYPE syindex,
    line_to   TYPE syindex,
    level     TYPE syindex,
  END OF st_src_include_index,
  it_src_include_index TYPE STANDARD TABLE OF st_src_include_index.


*-----------------------------------------------------------------------
* get_src_without_includes
*-----------------------------------------------------------------------
FORM get_src_without_includes
  USING
    it_src TYPE rswsourcet
    value(i_src_name) TYPE progname
    value(i_check) TYPE flag
    value(i_progname) TYPE progname
    value(i_replace) TYPE progname
  CHANGING
    ct_src_no_includes TYPE rswsourcet
    ct_index TYPE it_src_include_index.

  DATA BEGIN OF lh_tk OCCURS 5000.
         INCLUDE STRUCTURE stokex.
  DATA END OF lh_tk.
  DATA BEGIN OF stm OCCURS 1000.
         INCLUDE STRUCTURE sstmnt.
  DATA END OF stm.
  DATA BEGIN OF lv OCCURS 100.
         INCLUDE STRUCTURE slevel.
  DATA END OF lv.

  DATA:
    ls_index TYPE st_src_include_index,
    ls_index_t TYPE st_src_include_index,
    ls_offset type st_offset,
    ls_old_level TYPE st_level,
    ls_source TYPE abapsource,
    lt_include TYPE rswsourcet,
    lt_offset type it_offset,
    lt_old_level TYPE it_level,
    lt_source TYPE STANDARD TABLE OF abapsource,
    l_diff_end TYPE syindex,
    l_diff_new TYPE syindex,
    l_dollar_include TYPE progname,
    l_function TYPE flag,
    l_function_include TYPE progname,
    l_i TYPE syindex,
    l_include_count TYPE syindex,
    l_include_index TYPE sytabix,
    l_include_lines TYPE syindex,
    l_index_lines TYPE syindex,
    l_index_old_line_to TYPE syindex,
    l_level_dif TYPE syindex,
    l_level_t TYPE sytabix,
    l_lv_level_new TYPE level_levl,
    l_lv_level_old TYPE level_levl,
    l_msg(256),
    l_next TYPE syindex,
    l_next_level TYPE syindex,
    l_offset_lines TYPE syindex,
    l_offset_old_incl_anw TYPE syindex,
    l_old_level_lines TYPE sytabix,
    l_old_next_level TYPE sytabix,
    l_overflow_area(65535),
    l_source_lines TYPE syindex,
    l_stm_from TYPE stmnt_from,
    l_stm_index TYPE sytabix,
    l_stm_level TYPE stmnt_levl,
    l_str(255),
    l_tabix TYPE sytabix.

  FIELD-SYMBOLS:
    <l_fs>,
    <ls_offset> type st_offset.


  CALL FUNCTION 'RS_WORKING_AREA_INIT'.
  IF i_src_name NE space AND i_progname NE space.
    READ REPORT i_progname INTO lt_source.
    SCAN ABAP-SOURCE lt_source
      TOKENS INTO lh_tk
      STATEMENTS INTO stm
      LEVELS INTO lv
      OVERFLOW INTO l_overflow_area
      PROGRAM FROM i_progname
      MESSAGE INTO l_msg
      WITH INCLUDES
      WITHOUT TRMAC
      WITH ANALYSIS.
  ELSE.
    lt_source[] = it_src[].
    SCAN ABAP-SOURCE lt_source
      TOKENS INTO lh_tk
      STATEMENTS INTO stm
      LEVELS INTO lv
      OVERFLOW INTO l_overflow_area
      PROGRAM FROM i_src_name
      MESSAGE INTO l_msg
      WITH INCLUDES
      WITHOUT TRMAC
      WITH ANALYSIS.
  ENDIF.
  CLEAR:
    l_lv_level_new,
    l_lv_level_old.
  DESCRIBE TABLE lt_source LINES l_source_lines.
  l_tabix = 1.
  DO.     "LOOP AT stm.
    READ TABLE stm INDEX l_tabix.
    IF sy-subrc NE 0.
      EXIT.
    ENDIF.
    l_stm_index = l_tabix.
    l_tabix = l_tabix + 1.
    l_stm_from = stm-from.
    l_stm_level = stm-level.
    CLEAR:
      l_diff_new,
      l_diff_end.
    READ TABLE lh_tk INDEX l_stm_from.
    IF  sy-subrc = 0
    AND ( lh_tk-str = 'INCLUDE' OR lh_tk-str = 'FUNCTION' ).
      IF lh_tk-str = 'FUNCTION'.
        l_function = abap_true.
        l_function_include = ls_index-include.
        l_dollar_include = ls_index-include.
        l_i = strlen( l_dollar_include ) - 3.
        ASSIGN l_dollar_include+l_i(1) TO <l_fs>.
        IF <l_fs> = 'U'.
          <l_fs> = '$'.
        ELSE.
          l_function = abap_false.
          CLEAR l_dollar_include.
        ENDIF.
      ELSE.
        l_function = abap_false.
      ENDIF.
      l_next = l_stm_from + 1.
      READ TABLE lh_tk INDEX l_next.
      IF  sy-subrc = 0
      AND lh_tk-str NE 'STRUCTURE'
      AND lh_tk-str NE 'TYPE'
      AND lh_tk-str NE '='
      AND lh_tk-str NE '$$UNIT$$'.
        IF l_function = abap_true.
          ls_index-include = l_dollar_include.
        ELSE.
          CASE lh_tk-ovfl.
            WHEN space.
              ASSIGN lh_tk-str TO <l_fs>.
            WHEN 'X'.
              ASSIGN l_overflow_area TO <l_fs>.
            WHEN 'O'.
*            MESSAGE S116.
              EXIT.
          ENDCASE.
          IF lh_tk-len1 > 0.
            ASSIGN <l_fs>+lh_tk-off1(lh_tk-len1) TO <l_fs>.
          ENDIF.
          l_str = <l_fs>.
          IF l_str(1) = ''''.
            SHIFT l_str BY 1 PLACES.
          ENDIF.
          ls_index-include = l_str.
        ENDIF.
        IF  i_src_name NE space
        AND i_src_name =  l_function_include
        AND l_function =  abap_true.
          CONTINUE.
        ENDIF.
        IF ls_index-include = i_replace.
          CONTINUE.
        ENDIF.
        IF l_stm_level NE 0.
          READ TABLE lv INDEX l_stm_level.
          l_lv_level_new = lv-level + 1.
          DESCRIBE TABLE ct_index LINES l_index_lines.
          IF lv-level = 0 AND l_index_lines = 0.
            IF lv-stmnt = 0.
            ELSE.
              READ TABLE stm INDEX lv-stmnt.
            ENDIF.
            READ TABLE lh_tk INDEX stm-from.
            DESCRIBE TABLE ct_index LINES l_index_lines.
            IF i_src_name NE space AND
               i_src_name = ls_index-include AND
               i_progname NE i_src_name.
              lt_include[] = it_src[].
            ELSE.
              READ REPORT ls_index-include INTO lt_include.
            ENDIF.
            DESCRIBE TABLE lt_include LINES l_include_lines.
            DESCRIBE TABLE lt_source LINES l_source_lines.
            IF stm-level = 1 AND l_index_lines = 0..
              IF i_src_name NE space.
                ls_index_t-include = i_progname.
              ELSE.
                ls_index_t-include = i_src_name.
              ENDIF.
              ls_index_t-line_to = l_include_lines
                                   + l_source_lines - 1.
              ls_index_t-line_from = 1.
              ls_index_t-level = 0.
              APPEND ls_index_t TO ct_index.
              ls_index-level = lv-level + 1.
              ls_index-line_to = l_include_lines + lh_tk-row - 1.
              ls_index-line_from = lh_tk-row.
              ls_offset-index = lh_tk-row.
              ls_offset-length = l_source_lines.
              APPEND ls_offset to lt_offset.
              l_offset_old_incl_anw = lh_tk-row.
            ELSEIF stm-level > 1 AND l_index_lines = 0.
              IF i_src_name NE space.
                ls_index_t-include = i_progname.
              ELSE.
                ls_index_t-include = i_src_name.
              ENDIF.
              ls_index_t-line_to = ls_index-line_to + lh_tk-row..
              ls_index_t-line_from = 1.
              ls_index_t-level = 0.
              APPEND ls_index_t TO ct_index.
              ls_index-level = lv-level + 1.
              ls_index-line_to = ls_index-line_to + lh_tk-row.
              ls_index-line_from = ls_index-line_from + lh_tk-row.
              l_offset_old_incl_anw = lh_tk-row.
            ELSE.
              ls_index-level = lv-level + 1.
              IF l_lv_level_new < l_lv_level_old.
                READ TABLE lt_offset into ls_offset
                  INDEX l_lv_level_new.
                l_next_level = l_lv_level_new - 1.
                l_diff_end = ls_offset-length
                           - ls_offset-index - 1.
                READ TABLE lt_offset into ls_offset
                  INDEX l_next_level.
                l_offset_old_incl_anw = ls_offset-index.
                l_diff_new = lh_tk-row - l_offset_old_incl_anw.

                l_index_old_line_to = ls_index-line_to.
                ls_index-line_to = ls_index-line_to
                                 + l_include_lines + l_diff_new
                                 + l_diff_end - 1 .
                LOOP AT ct_index INTO ls_index_t.
                  IF ls_index_t-level < l_lv_level_new.
                    ls_index_t-line_to = ls_index_t-line_to
                             + l_include_lines
                             + l_diff_new
                             + l_diff_end.
                    MODIFY ct_index FROM ls_index_t .
                  ENDIF.
                ENDLOOP.
              ELSE.
                l_next_level = l_lv_level_new.
                READ TABLE lt_offset assigning <ls_offset>
                  INDEX l_next_level.
                IF sy-subrc = 0.
                  <ls_offset>-index = lh_tk-row.
                ENDIF.
                l_index_old_line_to = ls_index-line_to.
                ls_index-line_to = ls_index-line_to
                                 + lh_tk-row
                                 + l_include_lines.
                ls_index-line_from = ls_index-line_from + lh_tk-row.
                LOOP AT ct_index INTO ls_index_t.
                  IF ls_index_t-level < l_lv_level_new.
                    ls_index_t-line_to = ls_index_t-line_to
                                       + l_include_lines
                                       + lh_tk-row.
                    MODIFY ct_index FROM ls_index_t .
                  ENDIF.
                ENDLOOP.
              ENDIF.
              IF l_lv_level_new > l_lv_level_old.
                ls_index-line_from = ls_index-line_from
                                   + lh_tk-row.
              ELSEIF l_lv_level_new < l_lv_level_old.
                ls_index-line_from = l_index_old_line_to
                                   + l_diff_new
                                   + l_diff_end.
              ELSE.
                l_diff_new = lh_tk-row - l_offset_old_incl_anw.
                l_offset_old_incl_anw = lh_tk-row.
                ls_index-line_from = l_index_old_line_to
                                   + l_diff_new.
              ENDIF.
            ENDIF.
            IF lv-stmnt = 0.
              READ TABLE stm INDEX l_stm_index.
            ELSE.
              READ TABLE stm INDEX lv-stmnt.
            ENDIF.
            READ TABLE lh_tk INDEX stm-from.
            IF lh_tk-str = 'INCLUDE'.
              IF lv-stmnt = 0.
                l_include_index = lh_tk-row.
              ELSE.
                l_include_index = ls_index-line_from
                                + lh_tk-row - 1.
              ENDIF.
              DELETE lt_source INDEX l_include_index.
              INSERT LINES OF lt_include INTO lt_source
                     INDEX l_include_index.
            ENDIF.
            l_lv_level_old = l_lv_level_new.
          ELSE.

            ls_index-level = lv-level + 1.
            IF l_lv_level_new > l_lv_level_old.
              l_source_lines = l_include_lines.
            ENDIF.
            IF i_src_name NE space AND
               i_src_name = ls_index-include AND
               i_progname NE i_src_name.
              lt_include[] = it_src[].
            ELSE.
              READ REPORT ls_index-include INTO lt_include.
            ENDIF.
            DESCRIBE TABLE lt_include LINES l_include_lines.
            READ TABLE lh_tk INDEX l_stm_from.

            IF l_lv_level_new > l_lv_level_old.
              l_next_level = l_lv_level_new.
              READ TABLE lt_offset assigning <ls_offset>
                INDEX l_next_level.
              IF sy-subrc = 0.
                l_offset_old_incl_anw = lh_tk-row.
                <ls_offset>-index = l_offset_old_incl_anw.
                <ls_offset>-length = l_source_lines.
              ELSE.
                DESCRIBE TABLE lt_offset LINES l_offset_lines.
                l_level_dif = l_next_level - l_offset_lines - 1.
                IF l_level_dif > 0.
                  CLEAR ls_offset.  "and/or lt_offset ???
                  WHILE l_level_dif > 0.
                    APPEND ls_offset to lt_offset.
                    SUBTRACT 1 FROM l_level_dif.
                  ENDWHILE.
                ENDIF.
                l_offset_old_incl_anw = lh_tk-row.
                ls_offset-index = l_offset_old_incl_anw.
                ls_offset-length = l_source_lines.
                APPEND ls_offset to lt_offset.
              ENDIF.
              ls_index-line_to = ls_index-line_from
                               + l_include_lines
                               + lh_tk-row - 2.
              SORT ct_index BY line_from DESCENDING line_to ASCENDING.
              REFRESH lt_old_level.
              CLEAR l_old_level_lines.
              LOOP AT ct_index INTO ls_index_t.
                CLEAR ls_old_level.
                IF ls_index_t-level < l_lv_level_new.
                  IF l_old_level_lines > 0.
                    READ TABLE lt_old_level INTO ls_old_level
                      WITH KEY level = ls_index_t-level.
                    IF sy-subrc NE 0.
                      ls_old_level-level = ls_index_t-level.
                      APPEND ls_old_level TO lt_old_level.
                      l_old_level_lines = l_old_level_lines + 1.
                      ls_index_t-line_to = ls_index_t-line_to
                           + l_include_lines - 1.     " + tk-row.
                      MODIFY ct_index FROM ls_index_t.
                    ENDIF.
                  ELSE.
                    ls_old_level-level = ls_index_t-level.
                    APPEND ls_old_level TO lt_old_level.
                    l_old_level_lines = l_old_level_lines + 1.
                    ls_index_t-line_to = ls_index_t-line_to
                                       + l_include_lines - 1.
                    MODIFY ct_index FROM ls_index_t.
                  ENDIF.
                ENDIF.
              ENDLOOP.
              SORT ct_index BY line_from ASCENDING line_to DESCENDING.
            ELSEIF l_lv_level_new < l_lv_level_old.
              READ TABLE lh_tk INDEX l_stm_from.
              CLEAR ls_offset.
              READ TABLE lt_offset into ls_offset
                INDEX l_lv_level_old.

              CLEAR:
                l_diff_end,
                l_diff_new.
              l_next_level = l_lv_level_old.
              WHILE l_next_level > l_lv_level_new.
                l_old_next_level = l_next_level.
                l_next_level = l_next_level - 1.
                l_diff_end = l_diff_end
                           + ls_offset-length
                           - ls_offset-index.
                CLEAR ls_offset.
                MODIFY lt_offset from ls_offset
                  INDEX l_old_next_level.
                READ TABLE lt_offset into ls_offset
                  INDEX l_next_level.
                IF sy-subrc = 0.
                  l_offset_old_incl_anw = ls_offset-index.
                ELSE.
                  CLEAR ls_offset.
                ENDIF.
              ENDWHILE.
              READ TABLE lt_offset assigning <ls_offset>
                INDEX l_next_level.
              IF sy-subrc = 0.
                <ls_offset>-index = lh_tk-row.
              ENDIF.
              l_diff_new = l_diff_new + lh_tk-row
                         - l_offset_old_incl_anw.
              l_offset_old_incl_anw = lh_tk-row.
              l_index_old_line_to = ls_index-line_to.
              ls_index-line_to = ls_index-line_to
                               + l_include_lines
                               + l_diff_new
                               + l_diff_end - 1.
              SORT ct_index BY line_from DESCENDING.
              REFRESH lt_old_level.
              CLEAR l_old_level_lines.
              READ TABLE stm INDEX lv-stmnt.
              LOOP AT ct_index INTO ls_index_t.
                IF ls_index_t-level < l_lv_level_new.
                  IF l_old_level_lines > 0.
                    READ TABLE lt_old_level INTO ls_old_level
                      WITH KEY level = ls_index_t-level.
                    IF sy-subrc NE 0.
                      ls_old_level-level = ls_index_t-level.
                      APPEND ls_old_level TO lt_old_level.
                      ADD 1 TO l_old_level_lines.
                      ls_index_t-line_to = ls_index_t-line_to
                                         + l_include_lines  - 1.
                      MODIFY ct_index FROM ls_index_t .
                    ENDIF.
                  ELSE.
                    IF ls_index_t-level < l_lv_level_new.
                      ls_old_level-level = ls_index_t-level.
                      APPEND ls_old_level TO lt_old_level.
                      l_old_level_lines = l_old_level_lines + 1.
                      ls_index_t-line_to = ls_index_t-line_to
                                         + l_include_lines  - 1.
                    ELSE.
                      ls_old_level-level = ls_index_t-level.
                      APPEND ls_old_level TO lt_old_level.
                      l_old_level_lines = l_old_level_lines + 1.
                      ls_index_t-line_to = ls_index_t-line_to.
                    ENDIF.
                    MODIFY ct_index FROM ls_index_t .
                  ENDIF.
                ENDIF.
              ENDLOOP.
              SORT ct_index BY line_from ASCENDING.
            ELSE.
              READ TABLE lh_tk INDEX l_stm_from.
              l_diff_new = lh_tk-row - l_offset_old_incl_anw.
              l_offset_old_incl_anw = lh_tk-row.
              l_next_level = l_lv_level_new.
              READ TABLE lt_offset assigning <ls_offset>
                INDEX l_next_level.
              IF sy-subrc = 0.
                <ls_offset>-index = lh_tk-row.
              ENDIF.
              l_index_old_line_to = ls_index-line_to.
              ls_index-line_to = ls_index-line_to
                               + l_include_lines
                               + l_diff_new - 1.
              SORT ct_index BY line_from DESCENDING.
              REFRESH lt_old_level.
              CLEAR l_old_level_lines.
              LOOP AT ct_index INTO ls_index_t.
                l_level_t = l_lv_level_new - 1.
                IF ls_index_t-level = l_level_t.
                  IF ls_index_t-level < l_lv_level_new.
                    IF l_old_level_lines > 0.
                      READ TABLE lt_old_level INTO ls_old_level
                        WITH KEY level = ls_index_t-level.
                      IF sy-subrc NE 0.
                        ls_old_level-level = ls_index_t-level.
                        APPEND ls_old_level TO lt_old_level.
                        ADD 1 TO l_old_level_lines.
                        ls_index_t-line_to = ls_index_t-line_to
                                           + l_include_lines - 1.
                        MODIFY ct_index FROM ls_index_t .
                      ENDIF.
                    ELSE.
                      ls_old_level-level = ls_index_t-level.
                      APPEND ls_old_level TO lt_old_level.
                      ADD 1 TO l_old_level_lines.
                      ls_index_t-line_to = ls_index_t-line_to
                              + l_include_lines - 1.
                      MODIFY ct_index FROM ls_index_t .
                    ENDIF.
                  ENDIF.
                ELSE.
                  IF ls_index_t-level < l_lv_level_new.
                    IF l_old_level_lines > 0.
                      READ TABLE lt_old_level INTO ls_old_level
                        WITH KEY level = ls_index_t-level.
                      IF sy-subrc NE 0.
                        ls_old_level-level = ls_index_t-level.
                        APPEND ls_old_level TO lt_old_level.
                        ADD 1 TO l_old_level_lines.
                        ls_index_t-line_to = ls_index_t-line_to
                              + l_include_lines - 1.
                        MODIFY ct_index FROM ls_index_t .
                      ENDIF.
                    ELSE.
                      ls_old_level-level = ls_index_t-level.
                      APPEND ls_old_level TO lt_old_level.
                      ADD 1 TO l_old_level_lines.
                      ls_index_t-line_to = ls_index_t-line_to
                                         + l_include_lines - 1.
                      MODIFY ct_index FROM ls_index_t .
                    ENDIF.
                  ENDIF.
                ENDIF.
              ENDLOOP.
              SORT ct_index BY line_from ASCENDING.
            ENDIF.
            IF l_lv_level_new > l_lv_level_old.
              ls_index-line_from = ls_index-line_from
                                 + lh_tk-row - 1.
            ELSEIF l_lv_level_new < l_lv_level_old.
              ls_index-line_from = l_index_old_line_to
                                 + l_diff_new
                                 + l_diff_end.
            ELSE.
              l_offset_old_incl_anw = lh_tk-row.
              ls_index-line_from = l_index_old_line_to
                                 + l_diff_new.
            ENDIF.
            READ TABLE lh_tk INDEX stm-from.
            IF lh_tk-str = 'INCLUDE'
            OR lh_tk-str = 'FUNCTION'.
              l_include_index = ls_index-line_from.
              READ TABLE lt_source INTO ls_source INDEX l_include_index.
              IF sy-subrc = 0.
                IF ( ls_source-line CS 'INCLUDE'
                    AND ls_source-line CS ls_index-include )
                OR ( ls_source-line CS 'FUNCTION'
                    AND ls_source-line NS '$$UNIT$$' ).
                  DELETE lt_source INDEX l_include_index.
                  INSERT LINES OF lt_include INTO lt_source INDEX
                                 l_include_index.
*                ELSE.
*                  WRITE: 'Auflösungsfehler'(011). EXIT.
                ENDIF.
              ENDIF.
            ENDIF.
            l_lv_level_old = l_lv_level_new.
          ENDIF.
        ELSE.
          READ TABLE lh_tk INDEX l_stm_from.
          ls_index-line_from = lh_tk-row.
        ENDIF.
        APPEND ls_index TO ct_index.
      ENDIF.
    ENDIF.
  ENDDO.
  SORT ct_index BY line_from ASCENDING line_to DESCENDING.
  ct_src_no_includes[] = lt_source[].


ENDFORM.                    "get_src_without_includes
*&---------------------------------------------------------------------*
*&  Include           ZDB_DOWNLOAD_CONVERT_DATA                        *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& This file is part of ZDB.                                           *
*&                                                                     *
*& ZDB_DOWNLOAD 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.                                      *
*&                                                                     *
*& ZDB_DOWNLOAD 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* form: data2csv
*-----------------------------------------------------------------------
FORM data2csv USING
                value(i_tabname)
              CHANGING
                ct_csv TYPE it_string.
  DATA:
  lt_dd03l TYPE STANDARD TABLE OF dd03l,
  ls_dd02l TYPE dd02l,
  l_fieldname TYPE fieldname,
  l_position TYPE tabfdpos,
  l_value TYPE string,
  l_csv TYPE string,
  l_len TYPE i,
  l_length TYPE string,
  ls_fs TYPE REF TO data.

  FIELD-SYMBOLS:
  <ls_dd03l> TYPE dd03l,
  <ls_fs> TYPE ANY,
  <l_value> TYPE ANY.

  REFRESH ct_csv.

  SELECT * FROM dd03l INTO TABLE lt_dd03l
      WHERE tabname = i_tabname
      AND as4local = 'A'
      ORDER BY position.

  SELECT SINGLE * FROM dd02l INTO ls_dd02l
      WHERE tabname = i_tabname
      AND as4local = 'A'.

  LOOP AT lt_dd03l ASSIGNING <ls_dd03l>.
    IF <ls_dd03l>-fieldname+0(1) = '.'.
      CONTINUE.
    ENDIF.
    IF NOT l_csv IS INITIAL.
      CONCATENATE l_csv ';' INTO l_csv.
    ENDIF.
    l_len = <ls_dd03l>-intlen.
    l_length = l_len.
    CONDENSE l_length.
    CONCATENATE l_csv '"' <ls_dd03l>-fieldname
      '(' <ls_dd03l>-inttype l_length ')"'
      INTO l_csv.
  ENDLOOP.
  APPEND l_csv TO ct_csv.

*content
  CREATE DATA ls_fs TYPE (i_tabname).
  ASSIGN ls_fs->* TO <ls_fs>.
  SELECT * FROM (i_tabname) INTO <ls_fs>.
    CLEAR l_csv.
    LOOP AT lt_dd03l ASSIGNING <ls_dd03l>.
      CLEAR l_value.
      IF <ls_dd03l>-fieldname+0(1) = '.'.
        CONTINUE.
      ENDIF.

      IF NOT <ls_dd03l>-datatype = 'RAWSTRING'.
        ASSIGN COMPONENT <ls_dd03l>-fieldname OF STRUCTURE <ls_fs>
            TO <l_value>.
        l_value = <l_value>.
      ENDIF.

      IF NOT l_csv IS INITIAL.
        CONCATENATE l_csv ';' INTO l_csv.
      ENDIF.
      CONCATENATE l_csv '"' l_value '"' INTO l_csv.
    ENDLOOP.
    APPEND l_csv TO ct_csv.
    IF sy-dbcnt = g_add_db_max_lines.
      EXIT.
    ENDIF.
  ENDSELECT.

ENDFORM.                    "select_data2csv


*-----------------------------------------------------------------------
* form: data2xml
*-----------------------------------------------------------------------
FORM data2xml USING
                value(i_tabname)
              CHANGING
                ct_xml TYPE it_string.
  DATA:
  lt_dd03l TYPE STANDARD TABLE OF dd03l,
  ls_dd03t TYPE dd03t,
  ls_dd02l TYPE dd02l,
  ls_dd02t TYPE dd02t,
  l_fieldname(30) TYPE c,
  l_position TYPE tabfdpos,
  l_value TYPE string,
  l_xml TYPE string,
  ls_fs TYPE REF TO data.

  FIELD-SYMBOLS:
  <ls_dd03l> TYPE dd03l,
  <ls_fs> TYPE ANY,
  <l_value> TYPE ANY.

  REFRESH ct_xml.

  SELECT * FROM dd03l INTO TABLE lt_dd03l
      WHERE tabname = i_tabname
      AND as4local = 'A'
      ORDER BY position.

  APPEND '<?xml version="1.0" encoding="UTF-8" ?>' TO ct_xml.
  APPEND '<db>' TO ct_xml.
  APPEND '<definition><table>' TO ct_xml.
  SELECT SINGLE * FROM dd02l INTO ls_dd02l
    WHERE tabname = i_tabname
    AND as4local = 'A'.
  SELECT fieldname position FROM dd03l INTO (l_fieldname, l_position)
      WHERE tabname = 'DD02L'
      ORDER BY position.
    ASSIGN COMPONENT l_fieldname OF STRUCTURE ls_dd02l
        TO <l_value>.
    IF NOT <l_value> IS INITIAL.
      l_value = <l_value>.
      PERFORM encode_html CHANGING l_value.
      TRANSLATE l_fieldname TO LOWER CASE.
      CONCATENATE
        '<' l_fieldname ' value="' l_value '"/>'
        INTO l_xml.
      APPEND l_xml TO ct_xml.
    ENDIF.
  ENDSELECT.

  SELECT * FROM dd02t INTO ls_dd02t
      WHERE tabname = i_tabname
      AND as4local = 'A'.
    CONCATENATE
      '<text language="' ls_dd02t-ddlanguage '">'
      ls_dd02t-ddtext
      '</text>'
      INTO l_xml.
    APPEND l_xml TO ct_xml.
  ENDSELECT.

  APPEND '</table>' TO ct_xml.

  LOOP AT lt_dd03l ASSIGNING <ls_dd03l>.
    IF <ls_dd03l>-fieldname+0(1) = '.'.
      CONTINUE.
    ENDIF.
    APPEND '<col>' TO ct_xml.
    SELECT fieldname position FROM dd03l INTO (l_fieldname, l_position)
        WHERE tabname = 'DD03L'
        AND fieldname <> 'TABNAME'
        ORDER BY position.
      ASSIGN COMPONENT l_fieldname OF STRUCTURE <ls_dd03l>
        TO <l_value>.
      l_value = <l_value>.
      IF NOT <l_value> IS INITIAL.
        PERFORM encode_html CHANGING l_value.
        TRANSLATE l_fieldname TO LOWER CASE.
        CONCATENATE
            '<' l_fieldname '>' l_value '</' l_fieldname '>'
            INTO l_xml.
        APPEND l_xml TO ct_xml.
      ENDIF.
    ENDSELECT.
    SELECT * FROM dd03t INTO ls_dd03t
        WHERE tabname = <ls_dd03l>-tabname
        AND fieldname = <ls_dd03l>-fieldname
        AND as4local = 'A'.
      CONCATENATE
        '<text language="' ls_dd03t-ddlanguage '">'
        ls_dd03t-ddtext
        '</text>'
        INTO l_xml.
      APPEND l_xml TO ct_xml.
    ENDSELECT.
    APPEND '</col>' TO ct_xml.
  ENDLOOP.

  APPEND '</definition>' TO ct_xml.

*content
  APPEND '<lines>' TO ct_xml.

  CREATE DATA ls_fs TYPE (i_tabname).
  ASSIGN ls_fs->* TO <ls_fs>.
  SELECT * FROM (i_tabname) INTO <ls_fs>.
    CLEAR l_xml.

    APPEND '<line>' TO ct_xml.

    LOOP AT lt_dd03l ASSIGNING <ls_dd03l>.
      IF <ls_dd03l>-fieldname+0(1) = '.'.
        CONTINUE.
      ENDIF.
      CLEAR l_value.
      IF NOT <ls_dd03l>-datatype = 'RAWSTRING'.
        ASSIGN COMPONENT <ls_dd03l>-fieldname OF STRUCTURE <ls_fs>
            TO <l_value>.
        l_value = <l_value>.
        PERFORM encode_html CHANGING l_value.
      ENDIF.

      IF NOT <l_value> IS INITIAL.
        IF <ls_dd03l>-fieldname(1) = '.'.
          <ls_dd03l>-fieldname(1) = '_'.
        ENDIF.
        CONCATENATE
            '<cell name="' <ls_dd03l>-fieldname '">'
            l_value
            '</cell>' INTO l_xml.
        APPEND l_xml TO ct_xml.
      ENDIF.
    ENDLOOP.
    APPEND '</line>' TO ct_xml.
    IF sy-dbcnt = g_add_db_max_lines.
      EXIT.
    ENDIF.
  ENDSELECT.
  APPEND '</lines></db>' TO ct_xml.

ENDFORM.                    "select_data2xml
*&---------------------------------------------------------------------*
*&  Include           ZUTIL_LIC_GPL                                    *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& This file is part of ZUTIL.                                         *
*&                                                                     *
*& ZUTIL 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.                                               *
*&                                                                     *
*& ZUTIL 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 ZUTIL. If not, see <http://www.gnu.org/licenses/>.       *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&  Author:     Ruediger von Creytz     ruediger.creytz@globalbit.net  *
*&  Copyright:  globalBIT, LLC          http://www.globalbit.net       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* lic_gpl_html
*-----------------------------------------------------------------------
FORM lic_gpl_html
  CHANGING
    c_title TYPE string
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  c_title = 'GNU General Public License'.

  CONCATENATE
  '<p style="text-align: center;">Version 3, 29 June 2007</p>'
  '<p>Copyright &copy; 2007 Free Software Foundation, Inc.'
  ' &lt;http://fsf.org/&gt;</p>'
  '<p>Everyone is permitted to copy and distribute verbatim copies'
  ' of this license document, but changing it is not allowed.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  APPEND '<h3><a name="preamble"></a>Preamble</h3>' TO ct_html.

  CONCATENATE
  '<p>The GNU General Public License is a free, copyleft license for'
  ' software and other kinds of works.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>The licenses for most software and other practical works are'
  ' designed to take away your freedom to share and change the works.'
  ' By contrast, the GNU General Public License is intended to'
  ' guarantee your freedom to share and change all versions of a'
  ' program--to make sure it remains free software for all its users.'
  ' We, the Free Software Foundation, use the GNU General Public'
  ' License for most of our software; it applies also to any other'
  ' work released this way by its authors.  You can apply it to your'
  ' programs, too.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>When we speak of free software, we are referring to freedom, not'
  ' price.  Our General Public Licenses are designed to make sure that'
  ' you have the freedom to distribute copies of free software (and'
  ' charge for them if you wish), that you receive source code or can'
  ' get it if you want it, that you can change the software or use'
  ' pieces of it in new free programs, and that you know you can do'
  ' these things.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>To protect your rights, we need to prevent others from denying'
  ' you these rights or asking you to surrender the rights.'
  ' Therefore, you have certain responsibilities if you distribute'
  ' copies of the software, or if you modify it: responsibilities to'
  ' respect the freedom of others.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>For example, if you distribute copies of such a program, whether'
  ' gratis or for a fee, you must pass on to the recipients the same'
  ' freedoms that you received. You must make sure that they, too,'
  ' receive or can get the source code. And you must show them these'
  ' terms so they know their rights.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Developers that use the GNU GPL protect your rights with two'
  ' steps: (1) assert copyright on the software, and (2) offer you'
  ' this License giving you legal permission to copy, distribute'
  ' and/or modify it.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>For the developers'' and authors'' protection, the GPL clearly'
  ' explains that there is no warranty for this free software. For'
  ' both users'' and authors'' sake, the GPL requires that modified'
  ' versions be marked as changed, so that their problems will not be'
  ' attributed erroneously to authors of previous versions.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Some devices are designed to deny users access to install or run'
  ' modified versions of the software inside them, although the'
  ' manufacturer can do so. This is fundamentally incompatible with'
  ' the aim of protecting users'' freedom to change the software. The'
  ' systematic pattern of such abuse occurs in the area of products'
  ' for individuals to use, which is precisely where it is most'
  ' unacceptable. Therefore, we have designed this version of the GPL'
  ' to prohibit the practice for those products. If such problems'
  ' arise substantially in other domains, we stand ready to extend'
  ' this provision to those domains in future versions of the GPL, as'
  ' needed to protect the freedom of users.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Finally, every program is threatened constantly by'
  ' software patents. States should not allow patents to restrict'
  ' development and use of software on general-purpose computers, but'
  ' in those that do, we wish to avoid the special danger that'
  ' patents applied to a free program could make it effectively'
  ' proprietary.  To prevent this, the GPL assures that patents'
  ' cannot be used to render the program non-free.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>The precise terms and conditions for copying, distribution and'
  ' modification follow.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  APPEND '<h3><a name="terms"></a>TERMS AND CONDITIONS</h3>'
  TO ct_html.

  APPEND '<h4><a name="section0"></a>0. Definitions.</h4>'
  TO ct_html.

  CONCATENATE
  '<p>&ldquo;This License&rdquo; refers to version 3 of the GNU'
  ' General Public License.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>&ldquo;Copyright&rdquo; also means copyright-like laws that'
  ' apply to other kinds of works, such as semiconductor masks.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>&ldquo;The Program&rdquo; refers to any copyrightable work'
  ' licensed under this License. Each licensee is addressed as'
  ' &ldquo;you&rdquo;. &ldquo;Licensees&rdquo; and'
  ' &ldquo;recipients&rdquo; may be individuals or organizations.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>To &ldquo;modify&rdquo; a work means to copy from or adapt all'
  ' or part of the work in a fashion requiring copyright permission,'
  ' other than the making of an exact copy. The resulting work is'
  ' called a &ldquo;modified version&rdquo; of the earlier work or a'
  ' work &ldquo;based on&rdquo; the earlier work.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>A &ldquo;covered work&rdquo; means either the unmodified'
  ' Program or a work based on the Program.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>To &ldquo;propagate&rdquo; a work means to do anything with it'
  ' that, without permission, would make you directly or secondarily'
  ' liable for infringement under applicable copyright law, except'
  ' executing it on a computer or modifying a private copy.'
  ' Propagation includes copying, distribution (with or without'
  ' modification), making available to the public, and in some'
  ' countries other activities as well.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>To &ldquo;convey&rdquo; a work means any kind of propagation'
  ' that enables other parties to make or receive copies. Mere'
  ' interaction with a user through a computer network, with no'
  ' transfer of a copy, is not conveying.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>An interactive user interface displays &ldquo;Appropriate Legal'
  ' Notices&rdquo; to the extent that it includes a convenient and'
  ' prominently visible feature that (1) displays an appropriate'
  ' copyright notice, and (2) tells the user that there is no'
  ' warranty for the work (except to the extent that warranties are'
  ' provided), that licensees may convey the work under this License,'
  ' and how to view a copy of this License. If the interface presents'
  ' a list of user commands or options, such as a menu, a prominent'
  ' item in the list meets this criterion.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  APPEND '<h4><a name="section1"></a>1. Source Code.</h4>'
  TO ct_html.

  CONCATENATE
  '<p>The &ldquo;source code&rdquo; for a work means the preferred'
  ' form of the work for making modifications to it. &ldquo;Object'
  ' code&rdquo; means any non-source form of a work.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>A &ldquo;Standard Interface&rdquo; means an interface that'
  ' either is an official standard defined by a recognized standards'
  ' body, or, in the case of interfaces specified for a particular'
  ' programming language, one that is widely used among developers'
  ' working in that language.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>The &ldquo;System Libraries&rdquo; of an executable work'
  ' include anything, other than the work as a whole, that (a) is'
  ' included in the normal form of packaging a Major Component, but'
  ' which is not part of that Major Component, and (b) serves only'
  ' to enable use of the work with that Major Component, or to'
  ' implement a Standard Interface for which an implementation is'
  ' available to the public in source code form. A'
  ' &ldquo;Major Component&rdquo;, in this context, means a major'
  ' essential component (kernel, window system, and so on) of the'
  ' specific operating system (if any) on which the executable work'
  ' runs, or a compiler used to produce the work, or an object code'
  ' interpreter used to run it.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>The &ldquo;Corresponding Source&rdquo; for a work in object'
  ' code form means all the source code needed to generate, install,'
  ' and (for an executable work) run the object code and to modify'
  ' the work, including scripts to control those activities. However,'
  ' it does not include the work''s System Libraries, or'
  ' general-purpose tools or generally available free programs which'
  ' are used unmodified in performing those activities but which are'
  ' not part of the work.  For example, Corresponding Source includes'
  ' interface definition files associated with source files for the'
  ' work, and the source code for shared libraries and dynamically'
  ' linked subprograms that the work is specifically designed to'
  ' require, such as by intimate data communication or control flow'
  ' between those subprograms and other parts of the work.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>The Corresponding Source need not include anything that users'
  ' can regenerate automatically from other parts of the'
  ' Corresponding Source.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>The Corresponding Source for a work in source code form is that'
  ' same work.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  APPEND '<h4><a name="section2"></a>2. Basic Permissions.</h4>'
  TO ct_html.

  CONCATENATE
  '<p>All rights granted under this License are granted for the term'
  ' of copyright on the Program, and are irrevocable provided the'
  ' stated conditions are met. This License explicitly affirms your'
  ' unlimited permission to run the unmodified Program. The output'
  ' from running a covered work is covered by this License only if'
  ' the output, given its content, constitutes a covered work. This'
  ' License acknowledges your rights of fair use or other equivalent,'
  ' as provided by copyright law.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>You may make, run and propagate covered works that you do not'
  ' convey, without conditions so long as your license otherwise'
  ' remains in force. You may convey covered works to others for the'
  ' sole purpose of having them make modifications exclusively for'
  ' you, or provide you with facilities for running those works,'
  ' provided that you comply with the terms of this License in'
  ' conveying all material for which you do not control copyright.'
  ' Those thus making or running the covered works for you must do so'
  ' exclusively on your behalf, under your direction and control, on'
  ' terms that prohibit them from making any copies of your'
  ' copyrighted material outside their relationship with you.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Conveying under any other circumstances is permitted solely'
  ' under the conditions stated below.  Sublicensing is not allowed;'
  ' section 10 makes it unnecessary.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<h4><a name="section3"></a>3. Protecting Users'' Legal Rights From'
  ' Anti-Circumvention Law.</h4>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>No covered work shall be deemed part of an effective'
  ' technological measure under any applicable law fulfilling'
  ' obligations under article 11 of the WIPO copyright treaty adopted'
  ' on 20 December 1996, or similar laws prohibiting or restricting'
  ' circumvention of such measures.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>When you convey a covered work, you waive any legal power to'
  ' forbid circumvention of technological measures to the extent such'
  ' circumvention is effected by exercising rights under this License'
  ' with respect to the covered work, and you disclaim any intention'
  ' to limit operation or modification of the work as a means of'
  ' enforcing, against the work''s users, your or third parties'''
  ' legal rights to forbid circumvention of technological measures.'
  '</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  APPEND
  '<h4><a name="section4"></a>4. Conveying Verbatim Copies.</h4>'
  TO ct_html.

  CONCATENATE
  '<p>You may convey verbatim copies of the Program''s source code as'
  ' you receive it, in any medium, provided that you conspicuously'
  ' and appropriately publish on each copy an appropriate copyright'
  ' notice; keep intact all notices stating that this License and any'
  ' non-permissive terms added in accord with section 7 apply to the'
  ' code; keep intact all notices of the absence of any warranty; and'
  ' give all recipients a copy of this License along with the'
  ' Program.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>You may charge any price or no price for each copy that you'
  ' convey, and you may offer support or warranty protection for a'
  ' fee.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<h4><a name="section5"></a>5. Conveying Modified Source'
  ' Versions.</h4>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>You may convey a work based on the Program, or the'
  ' modifications to produce it from the Program, in the form of'
  ' source code under the terms of section 4, provided that you also'
  ' meet all of these conditions:</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<ul>'
  '<li>a) The work must carry prominent notices stating that you'
  ' modified it, and giving a relevant date.</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>b) The work must carry prominent notices stating that it is'
  ' released under this License and any conditions added under'
  ' section 7. This requirement modifies the requirement in section 4'
  ' to &ldquo;keep intact all notices&rdquo;.</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>c) You must license the entire work, as a whole, under this'
  ' License to anyone who comes into possession of a copy. This'
  ' License will therefore apply, along with any applicable section 7'
  ' additional terms, to the whole of the work, and all its parts,'
  ' regardless of how they are packaged. This License gives no'
  ' permission to license the work in any other way, but it does not'
  ' invalidate such permission if you have separately received it.'
  '</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>d) If the work has interactive user interfaces, each must'
  ' display Appropriate Legal Notices; however, if the Program has'
  ' interactive interfaces that do not display Appropriate Legal'
  ' Notices, your work need not make them do so.</li>'
  '</ul>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>A compilation of a covered work with other separate and'
  ' independent works, which are not by their nature extensions of'
  ' the covered work, and which are not combined with it such as to'
  ' form a larger program, in or on a volume of a storage or'
  ' distribution medium, is called an &ldquo;aggregate&rdquo; if the'
  ' compilation and its resulting copyright are not used to limit the'
  ' access or legal rights of the compilation''s users beyond what the'
  ' individual works permit.  Inclusion of a covered work in an'
  ' aggregate does not cause this License to apply to the other parts'
  ' of the aggregate.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  APPEND
  '<h4><a name="section6"></a>6. Conveying Non-Source Forms.</h4>'
  TO ct_html.

  CONCATENATE
  '<p>You may convey a covered work in object code form under the terms'
  ' of sections 4 and 5, provided that you also convey the'
  ' machine-readable Corresponding Source under the terms of this'
  ' License, in one of these ways:</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<ul>'
  '<li>a) Convey the object code in, or embodied in, a physical'
  ' product (including a physical distribution medium), accompanied'
  ' by the Corresponding Source fixed on a durable physical medium'
  ' customarily used for software interchange.</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>b) Convey the object code in, or embodied in, a physical'
  ' product (including a physical distribution medium), accompanied'
  ' by a written offer, valid for at least three years and valid for'
  ' as long as you offer spare parts or customer support for that'
  ' product model, to give anyone who possesses the object code'
  ' either (1) a copy of the Corresponding Source for all the'
  ' software in the product that is covered by this License, on a'
  ' durable physical medium customarily used for software'
  ' interchange, for a price no more than your reasonable cost of'
  ' physically performing this conveying of source, or (2) access to'
  ' copy the Corresponding Source from a network server at no charge.'
  '</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>c) Convey individual copies of the object code with a copy of'
  ' the written offer to provide the Corresponding Source. This'
  ' alternative is allowed only occasionally and noncommercially, and'
  ' only if you received the object code with such an offer, in'
  ' accord with subsection 6b.</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>d) Convey the object code by offering access from a designated'
  ' place (gratis or for a charge), and offer equivalent access to'
  ' the Corresponding Source in the same way through the same place'
  ' at no further charge. You need not require recipients to copy the'
  ' Corresponding Source along with the object code. If the place to'
  ' copy the object code is a network server, the Corresponding'
  ' Source may be on a different server (operated by you or a third'
  ' party) that supports equivalent copying facilities, provided you'
  ' maintain clear directions next to the object code saying where to'
  ' find the Corresponding Source. Regardless of what server hosts the'
  ' Corresponding Source, you remain obligated to ensure that it is'
  ' available for as long as needed to satisfy these requirements.'
  '</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>e) Convey the object code using peer-to-peer transmission,'
  ' provided you inform other peers where the object code and'
  ' Corresponding Source of the work are being offered to the general'
  'public at no charge under subsection 6d.</li>'
  '</ul>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>A separable portion of the object code, whose source code is'
  ' excluded from the Corresponding Source as a System Library, need'
  ' not be included in conveying the object code work.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>A &ldquo;User Product&rdquo; is either (1) a &ldquo;consumer'
  ' product&rdquo;, which means any tangible personal property which'
  ' is normally used for personal, family, or household purposes, or'
  ' (2) anything designed or sold for incorporation into a dwelling.'
  ' In determining whether a product is a consumer product, doubtful'
  ' cases shall be resolved in favor of coverage. For a particular'
  ' product received by a particular user, &ldquo;normally used&rdquo;'
  ' refers to a typical or common use of that class of product,'
  ' regardless of the status of the particular user or of the way in'
  ' which the particular user actually uses, or expects or is'
  ' expected to use, the product. A product is a consumer product'
  ' regardless of whether the product has substantial commercial,'
  ' industrial or non-consumer uses, unless such uses represent'
  ' the only significant mode of use of the product.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>&ldquo;Installation Information&rdquo; for a User Product means'
  ' any methods, procedures, authorization keys, or other information'
  ' required to install and execute modified versions of a covered'
  ' work in that User Product from a modified version of its'
  ' Corresponding Source. The information must suffice to ensure that'
  ' the continued functioning of the modified object code is in no'
  ' case prevented or interfered with solely because modification has'
  ' been made.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>If you convey an object code work under this section in, or'
  ' with, or specifically for use in, a User Product, and the'
  ' conveying occurs as part of a transaction in which the right of'
  ' possession and use of the User Product is transferred to the'
  ' recipient in perpetuity or for a fixed term (regardless of how'
  ' the transaction is characterized), the Corresponding Source'
  ' conveyed under this section must be accompanied by the'
  ' Installation Information. But this requirement does not apply if'
  ' neither you nor any third party retains the ability to install'
  ' modified object code on the User Product (for example, the work'
  ' has been installed in ROM).</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>The requirement to provide Installation Information does not'
  ' include a requirement to continue to provide support service,'
  ' warranty, or updates for a work that has been modified or installed'
  ' by the recipient, or for the User Product in which it has been'
  ' modified or installed. Access to a network may be denied when the'
  ' modification itself materially and adversely affects the operation'
  ' of the network or violates the rules and protocols for'
  ' communication across the network.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Corresponding Source conveyed, and Installation Information'
  ' provided, in accord with this section must be in a format that is'
  ' publicly documented (and with an implementation available to the'
  ' public in source code form), and must require no special password'
  ' or key for unpacking, reading or copying.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  APPEND '<h4><a name="section7"></a>7. Additional Terms.</h4>'
  TO ct_html.

  CONCATENATE
  '<p>&ldquo;Additional permissions&rdquo; are terms that supplement'
  ' the terms of this License by making exceptions from one or more'
  ' of its conditions. Additional permissions that are applicable to'
  ' the entire Program shall be treated as though they were included'
  ' in this License, to the extent that they are valid under'
  ' applicable law. If additional permissions apply only to part of'
  ' the Program, that part may be used separately under those'
  ' permissions, but the entire Program remains governed by this'
  ' License without regard to the additional permissions.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>When you convey a copy of a covered work, you may at your'
  ' option remove any additional permissions from that copy, or from'
  ' any part of it. (Additional permissions may be written to require'
  ' their own removal in certain cases when you modify the work.)'
  ' You may place additional permissions on material, added by you to'
  ' a covered work, for which you have or can give appropriate'
  ' copyright permission.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Notwithstanding any other provision of this License, for'
  ' material you add to a covered work, you may (if authorized by the'
  ' copyright holders of that material) supplement the terms of this'
  ' License with terms:</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<ul>'
  '<li>a) Disclaiming warranty or limiting liability differently from'
  ' the terms of sections 15 and 16 of this License; or</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>b) Requiring preservation of specified reasonable legal'
  ' notices or author attributions in that material or in the'
  ' Appropriate Legal Notices displayed by works containing it;'
  ' or</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>c) Prohibiting misrepresentation of the origin of that'
  ' material, or requiring that modified versions of such material be'
  ' marked in reasonable ways as different from the original version;'
  ' or</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>d) Limiting the use for publicity purposes of names of'
  ' licensors or authors of the material; or</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>e) Declining to grant rights under trademark law for use of'
  ' some trade names, trademarks, or service marks; or</li>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<li>f) Requiring indemnification of licensors and authors of that'
  ' material by anyone who conveys the material (or modified versions'
  ' of it) with contractual assumptions of liability to the'
  ' recipient, for any liability that these contractual assumptions'
  ' directly impose on those licensors and authors.</li>'
  '</ul>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>All other non-permissive additional terms are considered'
  ' &ldquo;further restrictions&rdquo; within the meaning of section'
  ' 10. If the Program as you received it, or any part of it, contains'
  ' a notice stating that it is governed by this License along with a'
  ' term that is a further restriction, you may remove that term. If a'
  ' license document contains a further restriction but permits'
  ' relicensing or conveying under this License, you may add to a'
  ' covered work material governed by the terms of that license'
  ' document, provided that the further restriction does not survive'
  ' such relicensing or conveying.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>If you add terms to a covered work in accord with this section,'
  ' you must place, in the relevant source files, a statement of the'
  ' additional terms that apply to those files, or a notice'
  ' indicating where to find the applicable terms.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Additional terms, permissive or non-permissive, may be stated'
  ' in the form of a separately written license, or stated as'
  ' exceptions; the above requirements apply either way.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  APPEND '<h4><a name="section8"></a>8. Termination.</h4>'
  TO ct_html.

  CONCATENATE
  '<p>You may not propagate or modify a covered work except as'
  ' expressly provided under this License. Any attempt otherwise to'
  ' propagate or modify it is void, and will automatically terminate'
  ' your rights under this License (including any patent licenses'
  ' granted under the third paragraph of section 11).</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>However, if you cease all violation of this License, then your'
  ' license from a particular copyright holder is reinstated (a)'
  ' provisionally, unless and until the copyright holder explicitly'
  ' and finally terminates your license, and (b) permanently, if the'
  ' copyright holder fails to notify you of the violation by some'
  ' reasonable means prior to 60 days after the cessation.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Moreover, your license from a particular copyright holder is'
  ' reinstated permanently if the copyright holder notifies you of'
  ' the violation by some reasonable means, this is the first time'
  ' you have received notice of violation of this License (for any'
  ' work) from that copyright holder, and you cure the violation'
  ' prior to 30 days after your receipt of the notice.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Termination of your rights under this section does not'
  ' terminate the licenses of parties who have received copies or'
  ' rights from you under this License. If your rights have been'
  ' terminated and not permanently reinstated, you do not qualify'
  ' to receive new licenses for the same material under section 10.'
  '</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<h4><a name="section9"></a>9. Acceptance Not Required for Having'
  ' Copies.</h4>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>You are not required to accept this License in order to receive'
  ' or run a copy of the Program.  Ancillary propagation of a covered'
  ' work occurring solely as a consequence of using peer-to-peer'
  ' transmission to receive a copy likewise does not require'
  ' acceptance.  However, nothing other than this License grants you'
  ' permission to propagate or modify any covered work. These actions'
  ' infringe copyright if you do not accept this License. Therefore,'
  ' by modifying or propagating a covered work, you indicate your'
  ' acceptance of this License to do so.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<h4><a name="section10"></a>10. Automatic Licensing of Downstream'
  ' Recipients.</h4>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Each time you convey a covered work, the recipient'
  ' automatically receives a license from the original licensors, to'
  ' run, modify and propagate that work, subject to this License. You'
  ' are not responsible for enforcing compliance by third parties'
  ' with this License.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>An &ldquo;entity transaction&rdquo; is a transaction'
  ' transferring control of an organization, or substantially all'
  ' assets of one, or subdividing an organization, or merging'
  ' organizations. If propagation of a covered work results from an'
  ' entity transaction, each party to that transaction who receives a'
  ' copy of the work also receives whatever licenses to the work the'
  ' party''s predecessor in interest had or could give under the'
  ' previous paragraph, plus a right to possession of the'
  ' Corresponding Source of the work from the predecessor in'
  ' interest, if the predecessor has it or can get it with reasonable'
  ' efforts.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>You may not impose any further restrictions on the exercise of'
  ' the rights granted or affirmed under this License.  For example,'
  ' you may not impose a license fee, royalty, or other charge for'
  ' exercise of rights granted under this License, and you may not'
  ' initiate litigation (including a cross-claim or counterclaim in a'
  ' lawsuit) alleging that any patent claim is infringed by making,'
  ' using, selling, offering for sale, or importing the Program or'
  ' any portion of it.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  APPEND '<h4><a name="section11"></a>11. Patents.</h4>' TO ct_html.

  CONCATENATE
  '<p>A &ldquo;contributor&rdquo; is a copyright holder who'
  ' authorizes use under this License of the Program or a work on'
  ' which the Program is based. The work thus licensed is called the'
  ' contributor''s &ldquo;contributor version&rdquo;.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>A contributor''s &ldquo;essential patent claims&rdquo; are all'
  ' patent claims owned or controlled by the contributor, whether'
  ' already acquired or hereafter acquired, that would be infringed'
  ' by some manner, permitted by this License, of making, using, or'
  ' selling its contributor version, but do not include claims that'
  ' would be infringed only as a consequence of further modification'
  ' of the contributor version.  For purposes of this definition,'
  ' &ldquo;control&rdquo; includes the right to grant patent'
  ' sublicenses in a manner consistent with the requirements of this'
  ' License.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Each contributor grants you a non-exclusive, worldwide,'
  ' royalty-free patent license under the contributor''s essential'
  ' patent claims, to make, use, sell, offer for sale, import and'
  ' otherwise run, modify and propagate the contents of its'
  ' contributor version.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>In the following three paragraphs, a &ldquo;patent'
  ' license&rdquo; is any express agreement or commitment, however'
  ' denominated, not to enforce a patent (such as an express'
  ' permission to practice a patent or covenant not to sue for patent'
  ' infringement). To &ldquo;grant&rdquo; such a patent license to a'
  ' party means to make such an agreement or commitment not to'
  ' enforce a patent against the party.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>If you convey a covered work, knowingly relying on a patent'
  ' license, and the Corresponding Source of the work is not'
  ' available for anyone to copy, free of charge and under the terms'
  ' of this License, through a publicly available network server or'
  ' other readily accessible means, then you must either (1) cause'
  ' the Corresponding Source to be so available, or (2) arrange to'
  ' deprive yourself of the benefit of the patent license for this'
  ' particular work, or (3) arrange, in a manner consistent with the'
  ' requirements of this License, to extend the patent license to'
  ' downstream recipients. &ldquo;Knowingly relying&rdquo; means you'
  ' have actual knowledge that, but for the patent license, your'
  ' conveying the covered work in a country, or your recipient''s use'
  ' of the covered work in a country, would infringe one or more'
  ' identifiable patents in that country that you have reason to'
  ' believe are valid.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>If, pursuant to or in connection with a single transaction or'
  ' arrangement, you convey, or propagate by procuring conveyance of,'
  ' a covered work, and grant a patent license to some of the parties'
  ' receiving the covered work authorizing them to use, propagate,'
  ' modify or convey a specific copy of the covered work, then the'
  ' patent license you grant is automatically extended to all'
  ' recipients of the covered work and works based on it.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>A patent license is &ldquo;discriminatory&rdquo; if it does not'
  ' include within the scope of its coverage, prohibits the exercise'
  ' of, or is conditioned on the non-exercise of one or more of the'
  ' rights that are specifically granted under this License. You may'
  ' not convey a covered work if you are a party to an arrangement'
  ' with a third party that is in the business of distributing'
  ' software, under which you make payment to the third party based'
  ' on the extent of your activity of conveying the work, and under'
  ' which the third party grants, to any of the parties who would'
  ' receive the covered work from you, a discriminatory patent'
  ' license (a) in connection with copies of the covered work'
  ' conveyed by you (or copies made from those copies), or (b)'
  ' primarily for and in connection with specific products or'
  ' compilations that contain the covered work, unless you entered'
  ' into that arrangement, or that patent license was granted, prior'
  ' to 28 March 2007.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Nothing in this License shall be construed as excluding or'
  ' limiting any implied license or other defenses to infringement'
  ' that may otherwise be available to you under applicable patent'
  ' law.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<h4><a name="section12"></a>12. No Surrender of Others'' Freedom.'
  '</h4>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>If conditions are imposed on you (whether by court order,'
  ' agreement or otherwise) that contradict the conditions of this'
  ' License, they do not excuse you from the conditions of this'
  ' License.  If you cannot convey a covered work so as to satisfy'
  ' simultaneously your obligations under this License and any other'
  ' pertinent obligations, then as a consequence you may not convey'
  ' it at all. For example, if you agree to terms that obligate you'
  ' to collect a royalty for further conveying from those to whom you'
  ' convey the Program, the only way you could satisfy both those'
  ' terms and this License would be to refrain entirely from'
  ' conveying the Program.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<h4><a name="section13"></a>13. Use with the GNU Affero General'
  ' Public License.</h4>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Notwithstanding any other provision of this License, you have'
  ' permission to link or combine any covered work with a work'
  ' licensed under version 3 of the GNU Affero General Public License'
  ' into a single combined work, and to convey the resulting work.'
  ' The terms of this License will continue to apply to the part'
  ' which is the covered work, but the special requirements of the'
  ' GNU Affero General Public License, section 13, concerning'
  ' interaction through a network will apply to the combination as'
  ' such.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<h4><a name="section14"></a>14. Revised Versions of this License.'
  '</h4>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>The Free Software Foundation may publish revised and/or new'
  ' versions of the GNU General Public License from time to time. Such'
  ' new versions will be similar in spirit to the present version, but'
  ' may differ in detail to address new problems or concerns.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Each version is given a distinguishing version number. If the'
  ' Program specifies that a certain numbered version of the GNU'
  ' General Public License &ldquo;or any later version&rdquo; applies'
  ' to it, you have the option of following the terms and conditions'
  ' either of that numbered version or of any later version published'
  ' by the Free Software Foundation. If the Program does not specify'
  ' a version number of the GNU General Public License, you may'
  ' choose any version ever published by the Free Software'
  ' Foundation.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>If the Program specifies that a proxy can decide which future'
  ' versions of the GNU General Public License can be used, that'
  ' proxy''s public statement of acceptance of a version permanently'
  ' authorizes you to choose that version for the Program.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>Later license versions may give you additional or different'
  ' permissions. However, no additional obligations are imposed on'
  ' any author or copyright holder as a result of your choosing to'
  ' follow a later version.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  APPEND
  '<h4><a name="section15"></a>15. Disclaimer of Warranty.</h4>'
  TO ct_html.

  CONCATENATE
  '<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED'
  ' BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE'
  ' COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM'
  ' &ldquo;AS IS&rdquo; WITHOUT WARRANTY OF ANY KIND, EITHER'
  ' EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED'
  ' WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR'
  ' PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE'
  ' PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU'
  ' ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.'
  '</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  APPEND
  '<h4><a name="section16"></a>16. Limitation of Liability.</h4>'
  TO ct_html.

  CONCATENATE
  '<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN'
  ' WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO'
  ' MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE'
  ' TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR'
  ' CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE'
  ' THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA'
  ' BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD'
  ' PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER'
  ' PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF'
  ' THE POSSIBILITY OF SUCH DAMAGES.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<h4><a name="section17"></a>17. Interpretation of Sections 15 and'
  ' 16.</h4>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

  CONCATENATE
  '<p>If the disclaimer of warranty and limitation of liability'
  ' provided above cannot be given local legal effect according to'
  ' their terms, reviewing courts shall apply local law that most'
  ' closely approximates an absolute waiver of all civil liability'
  ' in connection with the Program, unless a warranty or assumption'
  ' of liability accompanies a copy of the Program in return for a'
  ' fee.</p>'
  INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "lic_gpl_html
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_ADD                                    *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* add_report_sourceCode
*-----------------------------------------------------------------------
FORM add_report_sourcecode
  USING
    value(i_progname)
    value(i_filename)
    value(i_extension)
    value(i_add_no_includes)
    value(is_ztadir) TYPE st_ztadir
    value(i_id)
    value(i_on) TYPE flag
  CHANGING
    ct_html TYPE it_string.

  DATA:
  lt_initial TYPE it_string,
  lt_src TYPE it_string,
  lt_src_compressed TYPE it_string,
  lt_src_no_includes TYPE it_string,
  l_lines TYPE i,
  l_lines_no_includes TYPE i,
  l_filename TYPE string,
  l_filename_compressed TYPE string,
  l_filename_no_includes TYPE string.

  PERFORM try_read_report
    USING i_progname
    CHANGING lt_src.
  IF g_add_sourcecode = abap_true.
    l_filename = i_filename.
    PERFORM download
      USING
        lt_src
        is_ztadir-pgmid
        is_ztadir-object
        l_filename
        i_extension
        abap_false.
    IF i_add_no_includes = abap_true.
      PERFORM try_create_src_no_includes
        USING
          lt_initial
          i_progname
          i_progname
        CHANGING
          lt_src_no_includes.
      DESCRIBE TABLE lt_src LINES l_lines.
      DESCRIBE TABLE lt_src_no_includes LINES l_lines_no_includes.
      IF l_lines < l_lines_no_includes.
        CONCATENATE l_filename '.complete'
            INTO l_filename_no_includes.
        PERFORM download
          USING
            lt_src_no_includes
            is_ztadir-pgmid
            is_ztadir-object
            l_filename_no_includes
            i_extension
            abap_false.
      ENDIF.
      IF gc_src_max_rows < l_lines_no_includes.
        CONCATENATE l_filename '.compressed'
            INTO l_filename_compressed.
        PERFORM get_src_compressed
          USING lt_src_no_includes abap_false
          CHANGING lt_src_compressed.
        PERFORM download
          USING
            lt_src_compressed
            is_ztadir-pgmid
            is_ztadir-object
            l_filename_compressed
            i_extension
            abap_false.
      ENDIF.
    ENDIF.
  ENDIF.
  PERFORM html_add_sourcecode
    USING
      lt_src
      l_filename
      l_filename_no_includes
      l_filename_compressed
      i_extension
      i_id
      i_on
    CHANGING
      ct_html.
ENDFORM.                    "addReportSrc
*&---------------------------------------------------------------------*
*&  Include          ZSOFTCOPY_CSV                                     *
*&---------------------------------------------------------------------*
*&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*
*&!!!!!!!!!!! generated by ZSOFTCOPY_MAKE !!!!! do not edit !!!!!!!!!!!*
*&!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*
*&---------------------------------------------------------------------*
form csv_table_structure
changing ct_csv type it_string.
refresh ct_csv.
data ls_csv type string.
concatenate
'CLAS_ALIAS;01;CPDNAME;TXT_INTERFACE_COMPONENT;;L;;;|'
'CLAS_ALIAS;02;TYPE;TXT_LEVEL;;L;;;|'
'CLAS_ALIAS;03;REFCMPNAME;TXT_ALIAS;;L;;;|'
'CLAS_ALIAS;04;EXPOSURE;TXT_VISIBLE;;L;;;|'
'CLAS_ATTRI;01;CPDNAME;TXT_ATTRIBUTE;;L;INHERITED;;|'
'CLAS_ATTRI;02;DECLTYPE;TXT_LEVEL;;L;;;|'
'CLAS_ATTRI;03;EXPOSURE;TXT_VISIBILITY;;L;;;|'
'CLAS_ATTRI;04;CHECK_MODEL;TXT_MODELED_ONLY;;F;;;|'
'CLAS_ATTRI;05;ATTRDONLY;TXT_READ_ONLY;;F;;;|'
'CLAS_ATTRI;06;TYPTYPE;TXT_TYPING;;L;;;|'
'CLAS_ATTRI;07;TYPE;TXT_ASSOCIATED_TYPE;;L;;;|'
'CLAS_ATTRI;08;TYPELINK;;ONCLICK;B;;;|'
'CLAS_ATTRI;09;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
'CLAS_ATTRI;10;ATTVALUE;TXT_INITIAL_VALUE;;L;;;|'
'CLAS_EVENT;01;CPDNAME;TXT_EVENT;;L;INHERITED;;|'
'CLAS_EVENT;02;TYPE;TXT_LEVEL;;L;;;|'
'CLAS_EVENT;03;EXPOSURE;TXT_VISIBILITY;;L;;;|'
'CLAS_EVENT;04;CHECK_MODEL;TXT_MODELED_ONLY;;F;;;|'
'CLAS_EVENT;05;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
'CLAS_FRIEN;01;REFCLSNAME;TXT_INTERFACE;;L;;;|'
'CLAS_FRIEN;02;CHECK_MODEL;TXT_MODELED_ONLY;;F;;;|'
'CLAS_FRIEN;03;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
'CLAS_INTER;01;REFCLSNAME;TXT_INTERFACE;;L;INHERITED;;|'
'CLAS_INTER;02;IMPABSTRCT;TXT_ABSTRACT;;F;;;|'
'CLAS_INTER;03;IMPFINAL;TXT_FINAL;;F;;;|'
'CLAS_INTER;04;CHECK_MODEL;TXT_MODELED_ONLY;;F;;;|'
'CLAS_INTER;05;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
'CLAS_METHO;01;CPDNAME;TXT_METHOD;ONCLICK;H;INHERITED;;|'
'CLAS_METHO;02;TYPE;TXT_LEVEL;;L;;;|'
'CLAS_METHO;03;EXPOSURE;TXT_VISIBILITY;;L;;;|'
'CLAS_METHO;04;CHECK_MODEL;TXT_MODELED_ONLY;;F;;;|'
'CLAS_METHO;05;METHODTYPE;TXT_METHOD_TYPE;;L;;;|'
'CLAS_METHO;06;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
'CLAS_SIGNA;01;DECLARATION;TXT_LEVEL;;L;;;|'
'CLAS_SIGNA;02;PARAMETER;TXT_PARAMETERS;;L;;;|'
'CLAS_SIGNA;03;TYPE;TXT_TYPE_SPEC;;L;;;|'
'CLAS_SIGNA;04;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
'CLAS_SYMBO;01;KEY;TXT_SYMBOL;;L;;;|'
'CLAS_SYMBO;02;ENTRY;TXT_TEXT;;L;;;|'
'CLAS_SYMBO;03;STRLEN;TXT_DLEN;;L;;;|'
'CLAS_SYMBO;04;LENGTH;TXT_LENGTH;;L;;;|'
'CLAS_TYPEG;01;TYPEGROUP;TXTT_TYPE_GROUP_OBJECT_TYPE;;L;;;|'
'CLAS_TYPES;01;CPDNAME;TXT_TYPE___1;;L;INHERITED;;|'
'CLAS_TYPES;02;EXPOSURE;TXT_VISIBILITY;;L;;;|'
'CLAS_TYPES;03;CHECK_MODEL;TXT_MODELED_ONLY;;F;;;|'
'CLAS_TYPES;04;TYPTYPE;TXT_TYPING;;L;;;|'
'CLAS_TYPES;05;TYPE;TXT_ASSOCIATED_TYPE;;L;;;|'
'CLAS_TYPES;06;TYPELINK;;ONCLICK;B;;;|'
'CLAS_TYPES;07;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
'DEVC_INTF;01;INTF_NAME;TXT_PACKAGE_INTERFACE;;L;;;|'
'DEVC_INTF;02;FORSYS;TXT_SYSTEM;;L;;;|'
'DEVC_INTF;03;DESCRIPT;TXT_SHORT_TEXT___2;;L;;;|'
'DEVC_PERM;01;INTF_NAME;TXT_PACKAGE_INTERFACE;;L;;;|'
'DEVC_PERM;02;PACK_NAME;TXT_PACKAGE;;L;;;|'
'DEVC_PERM;03;ERR_SEVER;TXT_ERROR_SEVERITY;;L;;;|'
'DEVC_SUB;01;DEVCLASS;TXT_PACKAGE;;L;;;|'
'DEVC_SUB;02;CTEXT;TXT_SHORT_TEXT___2;;L;;;|'
'ENQU_PARAM;01;KEYFLAG;TXT_W;;F;;;|'
'ENQU_PARAM;02;VIEWFIELD;TXT_LOCK_PARAMETER;;L;;;|'
'ENQU_PARAM;03;TABNAME;TXT_TABLE;;L;;;|'
'ENQU_PARAM;04;FIELDNAME;TXT_FIELD;;L;;;|'
'INTF_ALIAS;01;CPDNAME;TXT_INTERFACE_COMPONENT;;L;;;|'
'INTF_ALIAS;02;TYPE;;;L;;;|'
'INTF_ALIAS;03;REFCMPNAME;TXT_ALIAS;;L;;;|'
'INTF_ATTRI;01;CPDNAME;TXT_ATTRIBUTE;;L;;;|'
'INTF_ATTRI;02;DECLTYPE;TXT_LEVEL;;L;;;|'
'INTF_ATTRI;03;CHECK_MODEL;TXT_MODELED_ONLY;;F;;;|'
'INTF_ATTRI;04;ATTRDONLY;TXT_READ_ONLY;;F;;;|'
'INTF_ATTRI;05;TYPTYPE;TXT_TYPING;;L;;;|'
'INTF_ATTRI;06;TYPELINK;;ONCLICK;B;;;|'
'INTF_ATTRI;07;TYPE;TXT_ASSOCIATED_TYPE;;L;;;|'
'INTF_ATTRI;08;ATTVALUE;TXT_INITIAL_VALUE;;L;;;|'
'INTF_EVENT;01;CPDNAME;TXT_EVENT;;L;;;|'
'INTF_EVENT;02;TYPE;TXT_LEVEL;;L;;;|'
'INTF_EVENT;03;CHECK_MODEL;TXT_MODELED_ONLY;;F;;;|'
'INTF_EVENT;04;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
'INTF_INTER;01;REFCLSNAME;TXT_INCLUDES;;L;;;|'
'INTF_INTER;02;CHECK_MODEL;TXT_MODELED_ONLY;;F;;;|'
'INTF_INTER;03;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
'INTF_METHO;01;CPDNAME;TXT_METHOD;;L;;;|'
'INTF_METHO;02;TYPE;TXT_LEVEL;;L;;;|'
'INTF_METHO;03;CHECK_MODEL;TXT_MODELED_ONLY;;F;;;|'
'INTF_METHO;04;METHODTYPE;TXT_METHOD_TYPE;;L;;;|'
'INTF_METHO;05;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
'INTF_TYPEG;01;TYPEGROUP;TXTT_TYPE_GROUP_OBJECT_TYPE;;L;;;|'
'INTF_TYPES;01;CPDNAME;TXT_TYPE___1;;L;;;|'
'INTF_TYPES;02;TYPTYPE;TXT_TYPING;;L;;;|'
'INTF_TYPES;03;TYPE;TXT_ASSOCIATED_TYPE;;L;;;|'
'INTF_TYPES;04;TYPELINK;;ONCLICK;B;;;|'
'INTF_TYPES;05;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
'MENU_COMPO;01;COMPONENT;TXT_SOFTWARE_COMPONENT;;L;;;|'
'MENU_COMPO;02;RELEASE;TXT_RELEASE;;L;;;|'
'MENU_COMPO;03;LEVEL;TXT_LEVEL;;L;;;|'
'MENU_COMPO;04;HIGH_PACKAGE;TXT_HIGHEST_SUPPORT_PACKAGE;;L;;;|'
'MENU_COMPO;05;DESC_TEXT;TXT_SHORT_DESCRIPTION_OF_SOFTW;;L;;;|'
'MODU_EXCEP;01;NAME;TXT_EXCEPTION___2;;L;;;|'
'MODU_EXCEP;02;STEXT;TXT_SHORT_TEXT___1;;L;;;|'
'MODU_EXCEP;03;LTEXT;TXT_LONG_TEXT;LTEXT_ONCLICK;B;;;|'
'MODU_EXPOR;01;NAME;TXT_PARAMETER_NAME;;L;;;|'
'MODU_EXPOR;02;TYPING;TXT_TYPE_SPEC;;L;;;|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'MODU_EXPOR;03;STRUCTURE;TXT_ASSOCIATED_TYPE;;L;;;|'
'MODU_EXPOR;04;PASSVALUE;TXT_PASS_VALUE;;F;;;|'
'MODU_EXPOR;05;STEXT;TXT_SHORT_TEXT___1;;L;;;|'
'MODU_EXPOR;06;LTEXT;TXT_LONG_TEXT;LTEXT_ONCLICK;B;;;|'
'MODU_IMPOR;01;NAME;TXT_PARAMETER_NAME;;L;;;|'
'MODU_IMPOR;02;TYPING;TXT_TYPE_SPEC;;L;;;|'
'MODU_IMPOR;03;STRUCTURE;TXT_ASSOCIATED_TYPE;;L;;;|'
'MODU_IMPOR;04;DEFAULTVAL;TXT_DEFAULT_VALUE___2;;L;;;|'
'MODU_IMPOR;05;OPTIONAL;TXT_OPTIONAL;;F;;;|'
'MODU_IMPOR;06;PASSVALUE;TXT_PASS_VALUE;;F;;;|'
'MODU_IMPOR;07;STEXT;TXT_SHORT_TEXT___1;;L;;;|'
'MODU_IMPOR;08;LTEXT;TXT_LONG_TEXT;LTEXT_ONCLICK;B;;;|'
'MODU_TABLE;01;NAME;TXT_PARAMETER_NAME;;L;;;|'
'MODU_TABLE;02;TYPING;TXT_TYPE_SPEC;;L;;;|'
'MODU_TABLE;03;STRUCTURE;TXT_ASSOCIATED_TYPE;;L;;;|'
'MODU_TABLE;04;OPTIONAL;TXT_OPTIONAL;;F;;;|'
'MODU_TABLE;05;STEXT;TXT_SHORT_TEXT___1;;L;;;|'
'MODU_TABLE;06;LTEXT;TXT_LONG_TEXT;LTEXT_ONCLICK;B;;;|'
'MSAG_MESS;01;MSGNR;TXT_MESSAGE;;L;;;|'
'MSAG_MESS;02;TEXT;TXT_MESSAGE_SHORT_TEXT;;L;;;|'
'MSAG_MESS;03;NO_DOCU;TXT_SELF_EXPLANATY;;F;;;|'
'MSAG_MESS;04;NAME;TXT_LAST_CHANGED_BY___3;;L;;;|'
'MSAG_MESS;05;DATUM_TEXT;TXT_CHANGED_ON;;L;;;|'
'MSAG_MESS;06;LTEXT;TXT_LONG_TEXT;LTEXT_ONCLICK;B;;;|'
'PROG_SELEC;01;KEY;TXT_NAME;;L;;;|'
'PROG_SELEC;02;ENTRY;TXT_TEXT;;L;;;|'
'PROG_SELEC;03;DICT_REF;TXT_DICTIONARY_REFERENCE;;F;;;|'
'PROG_SYMBO;01;KEY;TXT_SYMBOL;;L;;;|'
'PROG_SYMBO;02;ENTRY;TXT_TEXT;;L;;;|'
'PROG_SYMBO;03;STRLEN;TXT_DLEN;;L;;;|'
'PROG_SYMBO;04;LENGTH;TXT_LENGTH;;L;;;|'
'PROG_VARIA;01;VARIANT;TXT_VARIANT;;L;;;|'
'PROG_VARIA;02;SELNAME;TXT_PARAMETER;;L;;;|'
'PROG_VARIA;03;TEXT;TXT_PARAMETER_NAME;;L;;;|'
'PROG_VARIA;04;KIND;TXT_TYPE___2;;C;;;|'
'PROG_VARIA;05;SIGN;TXT_SIGN;;C;;;|'
'PROG_VARIA;06;OPTION;TXT_OPTION;;C;;;|'
'PROG_VARIA;07;LOW;TXT_LOWER_LIMIT;;L;;;|'
'PROG_VARIA;08;HIGH;TXT_UPPERLIMIT;;L;;;|'
'SCRN_DISPL;01;HIERARCHY;TXT_HIERARCHY;;L;;;|'
'SCRN_DISPL;02;EXTEND;TXT_MODIFIED;;L;;;|'
'SCRN_DISPL;03;NAME;TXT_NAME;;L;;;|'
'SCRN_DISPL;04;GTYP;TXT_TYPE_OF_SCREEN_ELEMENT;;L;;;|'
'SCRN_DISPL;05;HELL;TXT_BRG;;F;;;|'
'SCRN_DISPL;06;UNSI;TXT_INVISIBLE;;F;;;|'
'SCRN_DISPL;07;FJUS;TXT_RIGHT_JUST;;F;;;|'
'SCRN_DISPL;08;FILL;TXT_LEADING_ZEROS;;F;;;|'
'SCRN_DISPL;09;NO3D;TXT_2_DIMENSIONAL;;F;;;|'
'SCRN_DISPL;10;FIXF;TXT_FIXED_FONT;;F;;;|'
'SCRN_DISPL;11;LABELLEFT;TXT_AS_LABEL_LEFT;;F;;;|'
'SCRN_DISPL;12;LABELRIGHT;TXT_AS_LABEL_RIGHT;;F;;;|'
'SCRN_DISPL;13;DBLCLICK;TXT_RESP_TO_DBLCLK;;F;;;|'
'SCRN_GENER;01;HIERARCHY;TXT_HIERARCHY;;L;;;|'
'SCRN_GENER;02;EXTEND;TXT_MODIFIED;;L;;;|'
'SCRN_GENER;03;NAME;TXT_NAME;;L;;;|'
'SCRN_GENER;04;GTYP;TXT_TYPE_OF_SCREEN_ELEMENT;;L;;;|'
'SCRN_GENER;05;LINE;TXT_LINE;;R;;;|'
'SCRN_GENER;06;COLN;TXT_COLUMN;;R;;;|'
'SCRN_GENER;07;LENG;TXT_DEFLG;;R;;;|'
'SCRN_GENER;08;VLENG;TXT_VISLG;;R;;;|'
'SCRN_GENER;09;HIGH;TXT_HEIGHT;;R;;;|'
'SCRN_GENER;10;SCROLL;TXT_SCROLLABLE;;F;;;|'
'SCRN_GENER;11;TYPE;TXT_FORMAT;;L;;;|'
'SCRN_GENER;12;FEIN;TXT_INPUT;;F;;;|'
'SCRN_GENER;13;FOUT;TXT_OUTPUT;;F;;;|'
'SCRN_GENER;14;OOUT;TXT_OUTPUT_ONLY;;F;;;|'
'SCRN_GENER;15;DICT;TXT_DICT_FIELD;;F;;;|'
'SCRN_GENER;16;DMOD;TXT_DICT_MODIFIED;;L;;;|'
'SCRN_IOTEM;01;HIERARCHY;TXT_HIERARCHY;;L;;;|'
'SCRN_IOTEM;02;EXTEND;TXT_MODIFIED;;L;;;|'
'SCRN_IOTEM;03;NAME;TXT_NAME;;L;;;|'
'SCRN_IOTEM;04;GTYP;TXT_TYPE_OF_SCREEN_ELEMENT;;L;;;|'
'SCRN_IOTEM;05;STXT;TXT_TEXT_OR_IO_FIELD;;L;;;|'
'SCRN_IOTEM;06;DROPDOWN;TXT_DROPDOWN;;L;;;|'
'SCRN_IOTEM;07;ICON_X;TXT_WITH_ICON;;F;;;|'
'SCRN_IOTEM;08;ICON;TXT_ICON;;L;;;|'
'SCRN_IOTEM;09;ICON_N;TXT_ICON_NAME;;L;;;|'
'SCRN_IOTEM;10;ICON_Q;TXT_ICON_TEXT;;L;;;|'
'SCRN_MODGR;01;HIERARCHY;TXT_HIERARCHY;;L;;;|'
'SCRN_MODGR;02;EXTEND;TXT_MODIFIED;;L;;;|'
'SCRN_MODGR;03;NAME;TXT_NAME;;L;;;|'
'SCRN_MODGR;04;GTYP;TXT_TYPE_OF_SCREEN_ELEMENT;;L;;;|'
'SCRN_MODGR;05;GRP1;TXT_GROUP_1;;L;;;|'
'SCRN_MODGR;06;GRP2;TXT_GROUP_2;;L;;;|'
'SCRN_MODGR;07;GRP3;TXT_GROUP_3;;L;;;|'
'SCRN_MODGR;08;GRP4;TXT_GROUP_4;;L;;;|'
'SCRN_MODGR;09;CMBFOC;TXT_ENTRY_HELP;;F;;;|'
'SCRN_MODGR;10;DROPFROM;TXT_VALUE_LIST;;L;;;|'
'SCRN_MODGR;11;CMBTAST;TXT_POSS_ENTRIES_KEY;;L;;;|'
'SCRN_MODGR;12;FCOD;TXT_FUNCTION_CODE;;L;;;|'
'SCRN_MODGR;13;PTYPE;TXT_FUNCTIONAL_TYPE;;L;;;|'
'SCRN_MODGR;14;CTMENUONCT;TXT_DYNAMIC_CONTEXT_MENU;;L;;;|'
'SCRN_REFER;01;HIERARCHY;TXT_HIERARCHY;;L;;;|'
'SCRN_REFER;02;EXTEND;TXT_MODIFIED;;L;;;|'
'SCRN_REFER;03;NAME;TXT_NAME;;L;;;|'
'SCRN_REFER;04;GTYP;TXT_TYPE_OF_SCREEN_ELEMENT;;L;;;|'
'SCRN_REFER;05;MTCH;TXT_SEARCH_HELP;;L;;;|'
'SCRN_REFER;06;WAER;TXT_REFERENCE_FIELD;;L;;;|'
'SCRN_REFER;07;CCNAME;TXT_CONTROL_COMPOSITE_NAME;;L;;;|'
'SCRN_SPECI;01;HIERARCHY;TXT_HIERARCHY;;L;;;|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'SCRN_SPECI;02;EXTEND;TXT_MODIFIED;;L;;;|'
'SCRN_SPECI;03;NAME;TXT_NAME;;L;;;|'
'SCRN_SPECI;04;GTYP;TXT_TYPE_OF_SCREEN_ELEMENT;;L;;;|'
'SCRN_SPECI;05;FOBL;TXT_INPUT;;L;;;|'
'SCRN_SPECI;06;FSTR;TXT_ENTRY;;F;;;|'
'SCRN_SPECI;07;FNRS;TXT_NO_RESET;;F;;;|'
'SCRN_SPECI;08;FGKS;TXT_UPPER_LOWER_CASE_ENTRY;;F;;;|'
'SCRN_SPECI;09;FOSB;TXT_WITHOUT_TEMPLATE;;F;;;|'
'SCRN_SPECI;10;FFKY;TXT_FOREIGN_KEY;;F;;;|'
'SCRN_SPECI;11;FSPA;TXT_SET_PARAMETER;;F;;;|'
'SCRN_SPECI;12;FGPA;TXT_GET_PARAMETER;;F;;;|'
'SCRN_SPECI;13;PAID;TXT_PARAMETER_ID;;L;;;|'
'SCRN_SPECI;14;UCNV;TXT_CONVERSION_EXIT;;L;;;|'
'SHLP_PARAM;01;FIELDNAME;TXT_SEARCH_HELP_PARAMETER;;L;;;|'
'SHLP_PARAM;02;SHLPINPUT;TXT_IMP;;F;;;|'
'SHLP_PARAM;03;SHLPOUTPUT;TXT_EXP;;F;;;|'
'SHLP_PARAM;04;SHLPLISPOS;TXT_LPOS;;L;;;|'
'SHLP_PARAM;05;SHLPSELPOS;TXT_SPOS;;L;;;|'
'SHLP_PARAM;06;SHLPSELDIS;TXT_SDIS;;F;;;|'
'SHLP_PARAM;07;ROLLNAME;TXT_DATA_ELEMENT___1;;L;;;|'
'SHLP_PARAM;08;ROLLCHANGE;TXT_MODIFIED;;F;;;|'
'SHLP_PARAM;09;DEFAULTVAL;TXT_DEFAULT_VALUE___1;;L;;;|'
'TABL1COMPO;01;FIELDNAME;TXT_COMPONENT;;L;;;|'
'TABL1COMPO;02;REFTYPE;TXT_RTYPE;;F;;;|'
'TABL1COMPO;03;ROLLNAME;TXT_COMPONENT_TYPE;;L;;;|'
'TABL1COMPO;04;DATATYPE;TXT_DATA_TYPE;;L;;;|'
'TABL1COMPO;05;LENG;TXT_LENGTH;;I;;;|'
'TABL1COMPO;06;DECIMALS;TXT_DECIMAL_PLACES___T;;I;;;|'
'TABL1COMPO;07;DDTEXT;TXT_SHORT_TEXT___2;;L;;;|'
'TABL1COMPO;08;GROUPNAME;TXT_GROUP;;L;;;|'
'TABL1CURRQ;01;FIELDNAME;TXT_COMPONENT;;L;;;|'
'TABL1CURRQ;02;REFTYPE;TXT_RTYPE;;F;;;|'
'TABL1CURRQ;03;ROLLNAME;TXT_COMPONENT_TYPE;;L;;;|'
'TABL1CURRQ;04;DATATYPE;TXT_DATA_TYPE;;L;;;|'
'TABL1CURRQ;05;REFTABLE;TXT_REFERENCE_TABLE;;L;;;|'
'TABL1CURRQ;06;REFFIELD;TXT_REF_FIELD;;L;;;|'
'TABL1CURRQ;07;DDTEXT;TXT_SHORT_TEXT___2;;L;;;|'
'TABL1ENTRY;01;FIELDNAME;TXT_COMPONENT;;L;;;|'
'TABL1ENTRY;02;REFTYPE;TXT_RTYPE;;F;;;|'
'TABL1ENTRY;03;ROLLNAME;TXT_COMPONENT_TYPE;;L;;;|'
'TABL1ENTRY;04;DATATYPE;TXT_DATA_TYPE;;L;;;|'
'TABL1ENTRY;05;SHLPORIGIN_P;TXT_FOREIGN_KEY;;F;;;|'
'TABL1ENTRY;06;CHECKTABLE;TXT_CHECK_TABLE;;L;;;|'
'TABL1ENTRY;07;SHLPORIGIN_DDTEXT;TXT_ORIGIN_OF_THE_INPUT_HELP;;L;;;|'
'TABL1ENTRY;08;SHLPNAME;TXT_SRCH_HELP;;L;;;|'
'TABL1ENTRY;09;VALEXI;TXT_DEFAULTS;;F;;;|'
'TABL1ENTRY;10;DOMNAME;TXT_DOMAIN;;L;;;|'
'TABL2CURRQ;01;FIELDNAME;TXT_FIELD;;L;;;|'
'TABL2CURRQ;02;ROLLNAME;TXT_DATA_ELEMENT___1;;L;;;|'
'TABL2CURRQ;03;DATATYPE;TXT_DATA_TYPE;;L;;;|'
'TABL2CURRQ;04;REFTABLE;TXT_REFERENCE_TABLE;;L;;;|'
'TABL2CURRQ;05;REFFIELD;TXT_REF_FIELD;;L;;;|'
'TABL2CURRQ;06;DDTEXT;TXT_SHORT_TEXT___2;;L;;;|'
'TABL2ENTRY;01;FIELDNAME;TXT_FIELD;;L;;;|'
'TABL2ENTRY;02;ROLLNAME;TXT_DATA_ELEMENT___1;;L;;;|'
'TABL2ENTRY;03;DATATYPE;TXT_DATA_TYPE;;L;;;|'
'TABL2ENTRY;04;SHLPORIGIN_P;TXT_FOREIGN_KEY;;F;;;|'
'TABL2ENTRY;05;CHECKTABLE;TXT_CHECK_TABLE;;L;;;|'
'TABL2ENTRY;06;SHLPORIGIN_DDTEXT;TXT_ORIGIN_OF_THE_INPUT_HELP;;L;;;|'
'TABL2ENTRY;07;SHLPNAME;TXT_SRCH_HELP;;L;;;|'
'TABL2ENTRY;08;VALEXI;TXT_DEFAULTS;;F;;;|'
'TABL2ENTRY;09;DOMNAME;TXT_DOMAIN;;L;;;|'
'TABL2FIELD;01;FIELDNAME;TXT_FIELD;;L;;;|'
'TABL2FIELD;02;KEYFLAG;TXT_KEY___KEY;;F;;;|'
'TABL2FIELD;03;NOTNULL;TXT_INITIAL_VALUES;;F;;;|'
'TABL2FIELD;04;ROLLNAME;TXT_DATA_ELEMENT___1;;L;;;|'
'TABL2FIELD;05;DATATYPE;TXT_DATA_TYPE;;L;;;|'
'TABL2FIELD;06;LENG;TXT_LENGTH;;I;;;|'
'TABL2FIELD;07;DECIMALS;TXT_DECIMAL_PLACES___T;;I;;;|'
'TABL2FIELD;08;DDTEXT;TXT_SHORT_TEXT___2;;L;;;|'
'TABL2FIELD;09;GROUPNAME;TXT_GROUP;;L;;;|'
'TRAN_AUTHV;01;FIELD;TXT_FIELDS;;L;;;|'
'TRAN_AUTHV;02;VALUE;TXT_VALUES;;L;;;|'
'TRAN_DEFVA;01;PARA_FIELD;TXT_NAME_OF_SCREEN_FIELD;;L;;;|'
'TRAN_DEFVA;02;PARA_VALUE;TXT_VALUE;;L;;;|'
'TTYP_DD42V;01;KEYFDPOS;TXT_POSITION;;L;;;|'
'TTYP_DD42V;02;KEYFIELD;TXT_NAME;;L;;;|'
'VIEW_FIELD;01;VIEWFIELD;TXT_VIEW_FIELD;;L;;CO;AHDPSCV|'
'VIEW_FIELD;02;TABNAME;TXT_TABLE;;L;;CO;HDPSCV|'
'VIEW_FIELD;03;FIELDNAME;TXT_FIELD;;L;;CO;HDPSCV|'
'VIEW_FIELD;04;KEYFLAG;TXT_KEY___KEY;;F;;CO;P|'
'VIEW_FIELD;05;ROLLNAMEVI;TXT_DATA_ELEM;;L;;CO;PSCV|'
'VIEW_FIELD;06;ROLLCHANGE;TXT_MOD;;F;;CO;AHDPSCV|'
'VIEW_FIELD;07;DATATYPE;TXT_DTYP;;L;;CO;AHDPSCV|'
'VIEW_FIELD;08;FLENGTH;TXT_LENGTH;;I;;CO;AHDPSCV|'
'VIEW_FIELD;09;DDTEXT;TXT_SHORT_DESCRIPTION___1;;L;;CO;HDPCV|'
'VIEW_JOINC;01;TABNAME_L;TXT_TABLE;;L;;;|'
'VIEW_JOINC;02;FIELDNAME_L;TXT_FIELD_NAME;;L;;;|'
'VIEW_JOINC;03;OPERATOR;TXT_EQ;;C;;;|'
'VIEW_JOINC;04;TABNAME_R;TXT_TABLE;;L;;;|'
'VIEW_JOINC;05;FIELDNAME_R;TXT_FIELD_NAME;;L;;;|'
'VIEW_JOINT;01;TABNAME;TXT_TABLES;;L;;;|'
'VIEW_SELEC;01;TABNAME;TXT_TABLE;;L;;;|'
'VIEW_SELEC;02;FIELDNAME;TXT_FIELD_NAME;;L;;;|'
'VIEW_SELEC;03;OPERATOR;TXT_OPERATOR;;L;;;|'
'VIEW_SELEC;04;CONSTANTS;TXT_COMPARISON_VALUE;;L;;;|'
'VIEW_SELEC;05;AND_OR;TXT_AND_OR;;L;;;|'
'WAPA_ATTR;01;ALIASNAME;TXT_ATTRIBUTE;;L;;;|'
'WAPA_ATTR;02;PARDECLTYP_FLAG;TXT_AUTO;;F;;CO;B|'
'WAPA_ATTR;03;TYPTYPE_TXT;TXT_TYPINGMETH;;L;;;|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'WAPA_ATTR;04;TYPE;TXT_ASSOCIATED_TYPE;;L;;;|'
'WAPA_ATTR;05;TEXT;TXT_DESCRIPTION;;L;;;|'
'WAPA_NAVI;01;START;TXT_START;;L;;;|'
'WAPA_NAVI;02;NAVREQUEST;TXT_NAVIGATION_REQUEST;;L;;;|'
'WAPA_NAVI;03;TARGET;TXT_TARGET;;L;;;|'
'WTAG_ATTR;01;ATTID;TXT_ATTRIBUTE;;L;;;|'
'WTAG_ATTR;02;REQUIRED;TXT_REQUIRED;;F;;;|'
'WTAG_ATTR;03;RTEXPR;TXT_DYNAMIC_VALUE_ALLOWED;;F;;;|'
'WTAG_ATTR;04;BYREF;TXT_CALL_BY_REF;;F;;;|'
'WTAG_ATTR;05;BINDABLE;TXT_BINDABLE;;F;;;|'
'WTAG_ATTR;06;TYPTYPE_TXT;TXT_TYPING_METHOD;;L;;;|'
'WTAG_ATTR;07;TYPE;TXT_ASSOCIATED_TYPE;;L;;;|'
'WTAG_ATTR;08;DEFVAL;TXT_DFLT_VALUE;;L;;;|'
'WTAG_ATTR;09;DESCRIPT;TXT_DESCRIPTION;;L;;;|'
space into ls_csv.
append ls_csv to ct_csv.
endform.  "csv_table_structure
form csv_tabstrip
changing ct_csv type it_string.
refresh ct_csv.
data ls_csv type string.
concatenate
'DDIC_R3TR_DOMA;DOC;;01;X;0;TXT_DOCUMENTATION;;|'
'DDIC_R3TR_DOMA;ATTRIBUTES;;02;;0;TXT_PROPERTIES;;|'
'DDIC_R3TR_DOMA;DEFINITION;;03;;1;TXT_DEFINITION;;|'
'DDIC_R3TR_DOMA;VALUERANGE;;04;;0;TXT_VALUE_RANGE;;|'
'DDIC_R3TR_DTEL;DOC;;01;X;0;TXT_DOCUMENTATION;;|'
'DDIC_R3TR_DTEL;DOCDZ;;02;X;0;TXT_SUPPLEMENTARY_DOCUMENTATIO;;|'
'DDIC_R3TR_DTEL;ATTRIBUTES;;03;;0;TXT_ATTRIBUTES___1;;|'
'DDIC_R3TR_DTEL;DATATYPE;;04;;1;TXT_DATA_TYPE;;|'
'DDIC_R3TR_DTEL;FURTHERCHAR;;05;;0;TXT_FURTHER_CHARACTERISTICS;;|'
'DDIC_R3TR_DTEL;FIELDLABEL;;06;;0;TXT_FIELD_LABEL;;|'
'DDIC_R3TR_ENQU;ATTRIBUTES;;01;;0;TXT_ATTRIBUTES___1;;|'
'DDIC_R3TR_ENQU;TABLES;;02;;1;TXT_TABLES;;|'
'DDIC_R3TR_ENQU;LOCKPARAMETER;;03;;0;TXT_LOCK_PARAMETER;;|'
'DDIC_R3TR_SHLP;ATTRIBUTES;;01;;0;TXT_ATTRIBUTES___1;;|'
'DDIC_R3TR_SHLP;DEFINITION;;02;;1;TXT_DEFINITION;;|'
'DDIC_R3TR_TABL_1;EXCLASS;;01;X;0;TXT_ENHANCEMENT_CATEGORY;;|'
'DDIC_R3TR_TABL_1;DOC;;02;X;0;TXT_DOCUMENTATION;;|'
'DDIC_R3TR_TABL_1;ATTRIBUTES;;03;;0;TXT_ATTRIBUTES___1;;|'
'DDIC_R3TR_TABL_1;COMPONENTS;;04;;1;TXT_COMPONENTS;;|'
'DDIC_R3TR_TABL_1;ENTRY_HELP_CHECK;;05;;0;TXTT_ENTRY_HELP_CHECK;;|'
'DDIC_R3TR_TABL_1;CURR_QUANT_FIELDS;;06;;0;TXTT_CURRENCY_QUANTITY_FIE'
'LD;;|'
'DDIC_R3TR_TABL_2;TECH_SETTINGS;;01;X;0;TXT_TECHNICAL_SETTINGS;;|'
'DDIC_R3TR_TABL_2;EXCLASS;;02;X;0;TXT_ENHANCEMENT_CATEGORY;;|'
'DDIC_R3TR_TABL_2;TABLE_MAINT_GEN;;03;X;0;TXT_TABLE_MAINTENANCE_GENER'
'ATO;;|'
'DDIC_R3TR_TABL_2;DOC;;04;X;0;TXT_DOCUMENTATION;;|'
'DDIC_R3TR_TABL_2;ATTRIBUTES;;05;;0;TXT_ATTRIBUTES___1;;|'
'DDIC_R3TR_TABL_2;DELIVMAINT;;06;;0;TXT_DELIVERY_AND_MAINTENANCE;;|'
'DDIC_R3TR_TABL_2;FIELDS;;07;;1;TXT_FIELDS;;|'
'DDIC_R3TR_TABL_2;ENTRY_HELP_CHECK;;08;;0;TXTT_ENTRY_HELP_CHECK;;|'
'DDIC_R3TR_TABL_2;CURR_QUANT_FIELDS;;09;;0;TXTT_CURRENCY_QUANTITY_FIE'
'LD;;|'
'DDIC_R3TR_TTYP;ATTRIBUTES;;01;;0;TXT_ATTRIBUTES___1;;|'
'DDIC_R3TR_TTYP;LINETYPE;;02;;1;TXT_LINE_TYPE;;|'
'DDIC_R3TR_TTYP;INITACCESS;;03;;0;TXT_INITIALIZATION_AND_ACCESS;;|'
'DDIC_R3TR_TTYP;KEY;;04;;0;TXT_KEY;;|'
'DDIC_R3TR_TYPE;ATTRIBUTES;;01;;0;TXT_ATTRIBUTES___1;;|'
'DDIC_R3TR_TYPE;SOURCECODE;;02;;1;TXT_SOURCECDE;;|'
'DDIC_R3TR_VIEW;TECH_SETTINGS;;01;X;0;TXT_TECHNICAL_SETTINGS;CO;HDPSC'
'V|'
'DDIC_R3TR_VIEW;CREATE;;02;X;0;TXT_CREATE_STATEMENT;CO;HDPSCV|'
'DDIC_R3TR_VIEW;ATTRIBUTES;;03;;0;TXT_ATTRIBUTES___1;;|'
'DDIC_R3TR_VIEW;TABJOINCONDITIONS;;04;;0;TXTT_TABLES_JOIN_CONDITIONS;'
'CO;HDCV|'
'DDIC_R3TR_VIEW;VIEWFIELDS;;05;;1;TXT_VIEW_FLDS;;|'
'DDIC_R3TR_VIEW;SELECTIONCONDITIONS;;06;;0;TXT_SELECTION_CONDITIONS;C'
'O;HDPSCV|'
'DDIC_R3TR_VIEW;DELIVMAINT;;07;;0;TXT_MAINT_STATUS;CO;HDCV|'
'FUGR_R3TR_FUGR;ATTRIBUTES;;01;;1;TXT_ATTRIBUTES___1;;|'
'FUGR_R3TR_FUGR;MAIN_PROG;;02;;0;TXT_MAIN_PROGRAM;;|'
'FUGR_R3TR_FUGR;DOCUMENTATION;;03;;0;TXT_FUNCTION_GROUP_DOC;;|'
'FUGR_R3TR_INCLUDES;ATTRIBUTES;;01;;0;TXT_PROPERTIES;;|'
'FUGR_R3TR_INCLUDES;SOURCECODE;;02;;1;TXT_SOURCECDE;;|'
'FUGR_R3TR_MODULES;DOCUMENTATION;;01;X;0;TXT_FUNCTION_MODULE_DOCUMENT'
'AT;;|'
'FUGR_R3TR_MODULES;ATTRIBUTES;;02;;2;TXT_ATTRIBUTES___1;;|'
'FUGR_R3TR_MODULES;IMPORT;;03;;0;TXT_IMPORT;;|'
'FUGR_R3TR_MODULES;EXPORT;;04;;0;TXT_EXPORT;;|'
'FUGR_R3TR_MODULES;CHANGING;;05;;0;TXT_CHANGING;;|'
'FUGR_R3TR_MODULES;TABLES;;06;;0;TXT_TABLES;;|'
'FUGR_R3TR_MODULES;EXCEPTIONS;;07;;0;TXT_EXCEPTIONS;;|'
'FUGR_R3TR_MODULES;SOURCECODE;;08;;1;TXT_SOURCE_CODE;;|'
'FUGR_R3TR_SCREEN;ATTRIBUTES;;01;;2;TXT_ATTRIBUTES___1;;|'
'FUGR_R3TR_SCREEN;ELEMENT_LIST;;02;;0;TXT_ELEMENT_LIST;;|'
'FUGR_R3TR_SCREEN;GENERAL_ATTR;ELEMENT_LIST;03;;1;TXT_GENERAL_ATTR;;|'
'FUGR_R3TR_SCREEN;TEXTS_IO_TEMPLATES;ELEMENT_LIST;04;;0;TXT_TEXTS_IO_'
'TEMPLATES;;|'
'FUGR_R3TR_SCREEN;SPECIAL_ATTR;ELEMENT_LIST;05;;0;TXT_SPECIAL_ATTR;;|'
'FUGR_R3TR_SCREEN;DISPLAY_ATTR;ELEMENT_LIST;06;;0;TXT_DISPLAY_ATTR;;|'
'FUGR_R3TR_SCREEN;MOD_GROUPS_FUNCTIONS;ELEMENT_LIST;07;;0;TXT_MOD_GRO'
'UPS_FUNCTIONS;;|'
'FUGR_R3TR_SCREEN;REFERENCES;ELEMENT_LIST;08;;0;TXT_REFERENCES;;|'
'FUGR_R3TR_SCREEN;FLOW_LOGIC;;09;;1;TXT_FLOW_LOGIC;;|'
'O2_R3TR_WAPA;PROPERTIES;;01;;2;TXT_PROPERTIES;;|'
'O2_R3TR_WAPA;NAVIGATION;;02;;1;TXT_NAVIGATION;;|'
'O2_R3TR_WAPA_APPL;PROPERTIES;;01;;2;TXT_PROPERTIES;;|'
'O2_R3TR_WAPA_APPL;LAYOUT;;02;;1;TXT_LAYOUT;CO;BXV|'
'O2_R3TR_WAPA_APPL;EVENT_HANDLER;;03;;0;TXT_EVENT_HANDLER;CO;B|'
'O2_R3TR_WAPA_APPL;PAGE_ATTRIBUTES;;04;;0;TXT_PAGE_ATTRIBUTES;CO;BV|'
'O2_R3TR_WAPA_APPL;TYPE_DEFINITIONS;;05;;0;TXT_TYPE_DEFINITIONS;CO;B|'
'O2_R3TR_WTAG;PROPERTIES;;01;;1;TXT_PROPERTIES;;|'
'O2_R3TR_WTAG_EXT;PROPERTIES;;01;;1;TXT_PROPERTIES;;|'
'O2_R3TR_WTAG_EXT;ATTRIBUTE;;02;;0;TXT_ATTRIBUTE;;|'
'O2_R3TR_XSLT;ATTRIBUTES;;01;;2;TXT_ATTRIBUTES___1;;|'
'O2_R3TR_XSLT;SOURCECODE;;02;;1;TXT_SOURCECDE;;|'
'PACK_DEVC;ATTRIBUTES;;01;;1;TXT_ATTRIBUTES___1;;|'
'PACK_DEVC;INTERFACE;;02;;0;TXT_PACKAGE_INTERFACES;;|'
'PACK_DEVC;PERM;;03;;0;TXT_USE_ACCESS;;|'
'PACK_DEVC;SUB;;04;;0;TXT_PACKAGES_INCLUDED;;|'
'PROG_R3TR_INCL;ATTRIBUTES;;01;;2;TXT_PROPERTIES;;|'
'PROG_R3TR_INCL;SOURCECODE;;02;;1;TXT_SOURCECDE;;|'
'PROG_R3TR_PROG;LISTTITLE;;01;X;0;TXT_LIST_HEADINGS;;|'
'PROG_R3TR_PROG;SELECTIONTEXTS;;02;X;0;TXT_SELECTION_TEXTS;;|'
'PROG_R3TR_PROG;TEXTSYMBOLS;;03;X;0;TXT_TEXT_ELEMENTS;;|'
'PROG_R3TR_PROG;DOC;;04;X;0;TXT_DOCUMENTATION;;|'
'PROG_R3TR_PROG;VARIANT;;05;X;0;TXT_VARIANTS;;|'
'PROG_R3TR_PROG;ATTRIBUTES;;06;;2;TXT_PROPERTIES;;|'
'PROG_R3TR_PROG;SOURCECODE;;07;;1;TXT_SOURCECDE;;|'
'SEO_R3TR_CLAS;LOCTYPES;;01;X;0;TXT_LOCAL_TYPES;;|'
'SEO_R3TR_CLAS;IMPL;;02;X;0;TXT_IMPLEMENTATION;CO;N|'
'SEO_R3TR_CLAS;MACROS;;03;X;0;TXT_MACROS;CO;N|'
'SEO_R3TR_CLAS;DOC;;04;X;0;TXT_CLASS_DOCUMENTATION;;|'
'SEO_R3TR_CLAS;TEXTSYMBOLS;;05;X;0;TXT_TEXT_ELEMENTS;;|'
'SEO_R3TR_CLAS;PROPERTIES;;06;;0;TXT_PROPERTIES;;|'
'SEO_R3TR_CLAS;INTERFACES;;07;;3;TXT_INTERFACES;;|'
'SEO_R3TR_CLAS;FRIENDS;;08;;0;TXT_FRIENDS;;|'
'SEO_R3TR_CLAS;ATTRIBUTES;;09;;2;TXT_ATTRIBUTES___2;;|'
'SEO_R3TR_CLAS;METHODS;;10;;1;TXT_METHODS;;|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'SEO_R3TR_CLAS;EVENTS;;11;;0;TXT_EVENTS;;|'
'SEO_R3TR_CLAS;TYPES;;12;;0;TXT_TYPES;;|'
'SEO_R3TR_CLAS;ALIASES;;13;;0;TXT_ALIASES;;|'
'SEO_R3TR_INTF;DOC;;01;X;0;TXT_INTERFACE_DOCUMENTATION;;|'
'SEO_R3TR_INTF;PROPERTIES;;02;;3;TXT_PROPERTIES;;|'
'SEO_R3TR_INTF;INTERFACES;;03;;0;TXT_INTERFACES;;|'
'SEO_R3TR_INTF;ATTRIBUTES;;04;;2;TXT_ATTRIBUTES___2;;|'
'SEO_R3TR_INTF;METHODS;;05;;1;TXT_METHODS;;|'
'SEO_R3TR_INTF;EVENTS;;06;;0;TXT_EVENTS;;|'
'SEO_R3TR_INTF;TYPES;;07;;0;TXT_TYPES;;|'
'SEO_R3TR_INTF;ALIASES;;08;;0;TXT_ALIASES;;|'
'T_R3TR_MSAG;ATTRIBUTES;;01;;1;TXT_ATTRIBUTES___1;;|'
'T_R3TR_MSAG;MESSAGES;;02;;0;TXT_MESSAGES;;|'
'T_R3TR_TOBJ;ATTRIBUTES;;01;;1;TXT_ATTRIBUTES___1;;|'
'T_R3TR_TOBJ;ACTVT;;02;;0;TXT_ACTIVITIES;;|'
'T_R3TR_TOBJ;DOC;;03;;0;TXT_DOCUMENTATION;;|'
space into ls_csv.
append ls_csv to ct_csv.
endform.  "csv_tabstrip
form csv_text_elements_1
changing ct_csv type it_string.
refresh ct_csv.
data ls_csv type string.
concatenate
'TPT_DDIC_DOMA;Dictionary:;;;;;;;;;;;ECATT;212;TXT_DOMAIN;;;;|'
'TPT_DDIC_DTEL;Dictionary:;;;;;;;;;;;ECATT;212;TXT_DATA_ELEMENT___2;;'
';;|'
'TPT_DDIC_ENQU;Dictionary:;;;;;;;;;;;ECATT;212;TXT_LOCK_OBJECT___2;;;'
';|'
'TPT_DDIC_SHLP;Dictionary:;;;;;;;;;;;ECATT;212;TXT_SEARCH_HELP;;;;|'
'TPT_DDIC_STRU;Dictionary:;;;;;;;;;;;ECATT;212;TXT_STRUCTURE;;;;|'
'TPT_DDIC_TABL;Dictionary:;;;;;;;;;;;ECATT;212;TXT_TABLE;;;;|'
'TPT_DDIC_TTYP;Dictionary:;;;;;;;;;;;ECATT;212;TXT_TABLE_TYPE;;;;|'
'TPT_DDIC_TYPE;Dictionary:;;;;;;;;;;;ECATT;212;TXT_TYPE_GROUP;;;;|'
'TPT_DDIC_VIEW;Dictionary:;;;;;;;;;;;ECATT;212;TXT_VIEW;;;;|'
'TPT_FUGR_FUBA;Function Builder:;;;;;;;;;;;ECATT;212;VAR_NAME_VALUE;;'
';;|'
'TPT_FUGR_FUGR;;;;;;;;;;;;ECATT;212;TXT_FUNCTION_GROUP;;;;|'
'TPT_FUGR_INCL;ABAP Editor:;;;;;;;;;;;ECATT;212;TXTT_INCLUDE_NAME_VAL'
'UE;;;;|'
'TPT_FUGR_SCR;Screen Painter:;;;;;;;;;;;ECATT;212;TXTT_SCREEN_FOR_NAM'
'E_VALUE;;;;|'
'TPT_MSAG;Message Maintenance:;;;;;;;;;;;ECATT;212;TXT_MESSAGE_CLASS;'
';;;|'
'TPT_O2_WAPA;Web Application Builder:;;;;;;;;;;;ECATT;212;TXT_BSP_APP'
'LICATION;;;;|'
'TPT_O2_WAPA_CTRL;Web Application Builder:;;;;;;;;;;;ECATT;212;TXTT_C'
'ONTROLLER_OF_NAME_VALUE;;;;|'
'TPT_O2_WAPA_PAGE;Web Application Builder:;;;;;;;;;;;ECATT;212;TXTT_P'
'AGE_NAME_VALUE;;;;|'
'TPT_O2_WTAG;;;;;;;;;;;;ECATT;212;TXTT_BSP_EXTENSION_NAME_VALUE;;;;|'
'TPT_O2_XSLT;;;;;;;;;;;;ECATT;212;TXTT_TRANSFORMATION_NAME_VALUE;;;;|'
'TPT_PACK_DEVC;Package Builder:;;;;;;;;;;;ECATT;212;TXT_PACKAGE;;;;|'
'TPT_PARA;;;;;;;;;;;;ECATT;212;TXT_PARAMETER;;;;|'
'TPT_PROG_INCL;ABAP Editor:;;;;;;;;;;;ECATT;212;TXTT_INCLUDE_NAME_VAL'
'UE;;;;|'
'TPT_PROG_REPO;ABAP Editor:;;;;;;;;;;;ECATT;212;TXTT_REPORT_NAME_VALU'
'E;;;;|'
'TPT_SEO_CLAS;Class Builder:;;;;;;;;;;;ECATT;212;TXTT_CLASS_NAME_VALU'
'E;;;;|'
'TPT_SEO_INTF;Class Builder:;;;;;;;;;;;ECATT;212;TXTT_INTERFACE_NAME_'
'VALUE;;;;|'
'TPT_TOBJ;;;;;;;;;;;;ECATT;212;TXT_AUTHORIZATION_OBJECT___2;;;;|'
'TPT_TRAN;;;;;;;;;;;;ECATT;212;TXT_TRANSACTION;;;;|'
'TPT_TRAN_DIALOG;;;;;;;;;;;;ECATT;212;TXT_DIALOG_TRANSACTION;;;;|'
'TPT_TRAN_OBJ;;;;;;;;;;;;ECATT;212;TXT_OBJECT_TRANSACTION;;;;|'
'TPT_TRAN_PARAM;;;;;;;;;;;;ECATT;212;TXT_PARAMETER_TRANSACTION;;;;|'
'TPT_TRAN_REPO;;;;;;;;;;;;ECATT;212;TXT_REPORT_TRANSACTION;;;;|'
'TPT_TRAN_VARI;;;;;;;;;;;;ECATT;212;TXT_VARIANT_TRANSACTION;;;;|'
'TXTT_BSP_EXTENSION_NAME_VALUE;;;;;;;;TXT_BSP_EXTENSION;;VAR_NAME_VAL'
'UE;X;;;;;;;|'
'TXTT_CLASS_NAME_VALUE;;;;;;;;TXT_CLASS;;VAR_NAME_VALUE;X;;000;;;;;|'
'TXTT_CONTEXT_MENU_FORM_ON_CTME;;;;;;;;TXT_CONTEXT_MENU;FORM ON CTMEN'
'U;;X;;000;;;;;|'
'TXTT_CONTROLLER_OF_NAME_VALUE;;;;;;;;;;;;;;;;;;|'
'TXTT_CURRENCY_QUANTITY_FIELD;;;;;;;;TXT_CURRENCY;/;TXT_QUANTITY_FIEL'
'D;;;000;;;;;|'
'TXTT_ENTRY_HELP_CHECK;;;;;;;;TXT_ENTRY_HELP;/;TXT_CHECK;;;000;;;;;|'
'TXTT_INCLUDE_NAME_VALUE;;;;;;;;TXT_INCLUDE;;VAR_NAME_VALUE;X;;000;;;'
';;|'
'TXTT_INTERFACE_NAME_VALUE;;;;;;;;TXT_INTERFACE;;VAR_NAME_VALUE;X;;00'
'0;;;;;|'
'TXTT_LINES_COLUMNS;;;;;;;;TXT_LINES;/;TXT_COLUMNS;;;000;;;;;|'
'TXTT_PAGE_NAME_VALUE;;;;;;;;;;;;;;;;;;|'
'TXTT_REPORT_NAME_VALUE;;;;;;;;TXT_REPORT;;VAR_NAME_VALUE;X;;000;;;;;|'
'TXTT_SCREEN_FOR_NAME_VALUE;;;;;;;;TXT_SCREEN_FOR;;VAR_NAME_VALUE;X;;'
'000;;;;;|'
'TXTT_TABLES_JOIN_CONDITIONS;;;;;;;;TXT_TABLES;/;TXT_JOIN_CONDITIONS;'
';;000;;;;;|'
'TXTT_TRANSFORMATION_NAME_VALUE;;;;;;;;TXT_TRANSFORMATION;;VAR_NAME_V'
'ALUE;X;;000;;;;;|'
'TXTT_TYPE_GROUP_OBJECT_TYPE;;;;;;;;TXT_TYPE_GROUP;/;TXT_OBJECT_TYPE;'
';;000;;;;;|'
'TXTT_UNICODE_CHECKS_ACTIVE;;;;;;;;TXT_UNICODE_CHECKS;;TXT_ACTIVE___2'
';X;;000;;;;;|'
'TXT_2_DIMENSIONAL;;SCRFNO3D;M;;;;;;;;;;000;;;;;|'
'TXT_ABAP_LOAD;;;;;;;;;;;;;000;;;;;|'
'TXT_ABOUT;;;;;;;;;;;;;000;;;;;|'
'TXT_ABSTRACT;;SEOABSTRCT;M;;;;;;;;;;000;;;;;|'
'TXT_ACCESS;;DD_V_ACC;D;;;;;;;;;;000;;;;;|'
'TXT_ACCESS_TYPE_IS_GIVEN_FOR_A;;;;;;;;;;;;;000;;;;;|'
'TXT_ACTIVATED;;AIND_ACTIV;S;;;;;;;;;;000;;;;;|'
'TXT_ACTIVE___1;;SAAACTIVE;M;;;;;;;;;;000;;;;;|'
'TXT_ACTIVE___2;;AD_ACTIVE;M;;;;;;;;;;000;;;;;|'
'TXT_ACTIVITIES;;STAT_TITL;M;;;;;;;;;;;;;;;|'
'TXT_ACTIVITY;;SWW_ACTVT;M;;;;;;;;;;;;;;;|'
'TXT_ALIAS;;UDALIAS;M;;;;;;;;;;000;;;;;|'
'TXT_ALIASES;;;;;;;;;;;;;000;;;;;|'
'TXT_ALLOWED_OBJECT_TYPES;;;;;;;;;;;;;000;;;;;|'
'TXT_ALLOW_RFC;;RFCENABLE;M;;;;;;;;;;000;;;;;|'
'TXT_ALL_RIGHTS_RESERVED;;;;;;;;;;;;;000;;;;;|'
'TXT_AND_OR;;VSCONJ;M;;;;;;;;;;000;;;;;|'
'TXT_APPENDING_VIEW;;APPENDVIEW;T;;;;;;;;;;000;;;;;|'
'TXT_APPLICATION;;RS38L_APPL;M;;;;;;;;;;000;;;;;|'
'TXT_APPLICATION_CLASS;;O2APPLCLAS;D;;;;;;;;;;000;;;;;|'
'TXT_APPLICATION_COMPONENT;;TM_COMPONT;T;;;;;;;;;;000;;;;;|'
'TXT_ASSIGNED_ERROR_PAGE;;;;;;;;;;;;;000;;;;;|'
'TXT_ASSOCIATED_TYPE;;RS38L_TYP;M;;;;;;;;;;000;;;;;|'
'TXT_ASSOCIATED_TYPE_FOR_LOW_HI;;;;;;;;;;;;;000;;;;;|'
'TXT_AS_LABEL_LEFT;;SCRPLABELL;M;;;;;;;;;;000;;;;;|'
'TXT_AS_LABEL_RIGHT;;SCRPLABELR;M;;;;;;;;;;000;;;;;|'
'TXT_ATTRIBUTE;;SEOATTNAME;M;;;;;;;;;;000;;;;;|'
'TXT_ATTRIBUTES___1;;EX_DPA;M;;;;;;;;;;000;;;;;|'
'TXT_ATTRIBUTES___2;;STAT_ATTR;M;;;;;;;;;;000;;;;;|'
'TXT_AUTHORIZATION_FIELDS;;;;;;;;;;;;;;;;;;|'
'TXT_AUTHORIZATION_GROUP;;P_GROUP;T;;;;;;;;;;000;;;;;|'
'TXT_AUTHORIZATION_OBJECT___1;;BROBJ;D;;;;;;;;;;000;;;;;|'
'TXT_AUTHORIZATION_OBJECT___2;;LS_AUTHOB;M;;;;;;;;;;000;;;;;|'
'TXT_AUTO;;O2AUTOPAR;S;;;;;;;;;;000;;;;;|'
'TXT_AUTOR;;XUAUTHOR;M;;;;;;;;;;;;;;;|'
'TXT_BINDABLE;;O2BINDABLE;M;;;;;;;;;;;;;;;|'
'TXT_BLANK;;;;AD_MNTMD;0004;;;;;;;;;;;;;|'
'TXT_BRG;;SCRFHELL;M;;;;;;;;;;000;;;;;|'
'TXT_BROWSER_CACHE;;O2BCACHE;M;;;;;;;;;;000;;;;;|'
'TXT_BROWSER_SPECIFIC;;O2BDEP;L;;;;;;;;;;000;;;;;|'
'TXT_BSP_APPLICATION;;O2APPLEXT;M;;;;;;;;;;000;;;;;|'
'TXT_BSP_APPLICATIONS;;;;;;;;;;;;;000;;;;;|'
'TXT_BSP_ELEMENT;;O2TAGID;M;;;;;;;;;;;;;;;|'
'TXT_BSP_ELEMENTS_AND_STATIC_HT;;;;;;;;;;;;;;;;;;|'
'TXT_BSP_ELEMENTS_ONLY;;;;;;;;;;;;;;;;;;|'
'TXT_BSP_ELEMENT_BASIS_CLASS;;;;;;;;;;;;;;;;;;|'
'TXT_BSP_EXTENSION;;O2TLIBID;M;;;;;;;;;;;;;;;|'
'TXT_BSP_EXTENSIONS;;;;;;;;;;;;;000;;;;;|'
'TXT_BSP_EXTENSION_CLASS;;;;;;;;;;;;;;;;;;|'
'TXT_BSP_LIBRARY;;;;;;;;;;;;;000;;;;;|'
'TXT_BUFFERING;;BUFSTATE;M;;;;;;;;;;000;;;;;|'
'TXT_BUFFERING_TYPE;;PUFFERUNGT;M;;;;;;;;;;000;;;;;|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_BUILT_IN_TYPE;;;;;;;;;;;;;000;;;;;|'
'TXT_CACHING;;;;;;;;;;;;;000;;;;;|'
'TXT_CALL_BY_REF;;O2BYREF;M;;;;;;;;;;;;;;;|'
'TXT_CATEGORY;;SEOCATEGRY;M;;;;;;;;;;000;;;;;|'
'TXT_CHANGED_ON;;UPDAT;M;;;;;;;;;;000;;;;;|'
'TXT_CHANGES_ARE_RECORDED;;KORRFLAG;D;;;;;;;;;;000;;;;;|'
'TXT_CHANGE_DOCUMENT;;LOGFLAG;M;;;;;;;;;;000;;;;;|'
'TXT_CHANGING;;RS38L_PACH;S;;;;;;;;;;000;;;;;|'
'TXT_CHECK;;AM_CHECC;M;;;;;;;;;;000;;;;;|'
'TXT_CHECK_TABLE;;CHECKTABLE;M;;;;;;;;;;000;;;;;|'
'TXT_CLASS;;SEOCLNAME;M;;;;;;;;;;000;;;;;|'
'TXT_CLASSES;;CT_CLASSES_FLAG;M;;;;;;;;;;000;;;;;|'
'TXT_CLASSIFICATION;;SDC_CLS;M;;;;;;;;;;000;;;;;|'
'TXT_CLASS_DOCUMENTATION;;;;;;;;;;;;;000;;;;;|'
'TXT_CLASS_LIBRARY;;;;;;;;;;;;;000;;;;;|'
'TXT_CLASS_NAME;;ETCLS_NAME;M;;;;;;;;;;;;;;;|'
'TXT_CLIENT;;MANDT;M;;;;;;;;;;000;;;;;|'
'TXT_CLUSTER_TABLE;;;;;;;;;;;;;000;;;;;|'
'TXT_COLL_RUN;;RS38L_TSK4;M;;;;;;;;;;000;;;;;|'
'TXT_COLUMN;;SCRFTLFNR;M;;;;;;;;;;000;;;;;|'
'TXT_COLUMNS;;SYSCOLS;M;;;;;;;;;;000;;;;;|'
'TXT_COLUMN_HEADING;;DDCMPTITLE;D;;;;;;;;;;000;;;;;|'
'TXT_COMPARE_FLAG;;;;;;;;;;;;;000;;;;;|'
'TXT_COMPARISON_VALUE;;;;;;;;;;;;;000;;;;;|'
'TXT_COMPILATION;;;;;;;;;;;;;000;;;;;|'
'TXT_COMPLETE;;COMPLETE;M;;;;;;;;;;000;;;;;|'
'TXT_COMPLETED;;;;RF_TRLISTSTATUS;3;;;;;;;;000;;;;;|'
'TXT_COMPONENT;;COMPONENTE;M;;;;;;;;;;000;;;;;|'
'TXT_COMPONENTS;;MODEDIT;M;;;;;;;;;;000;;;;;|'
'TXT_COMPONENT_INFORMATION;;;;;;;;;;;;;000;;;;;|'
'TXT_COMPONENT_TYPE;;RELC_TYPE;M;;;;;;;;;;000;;;;;|'
'TXT_COMPONENT_VERSION;;ETKVNR;T;;;;;;;;;;000;;;;;|'
'TXT_COMPRESSED;;LTCOMP;M;;;;;;;;;;000;;;;;|'
'TXT_COMPRESSION;;O2STRIPMODE;M;;;;;;;;;;000;;;;;|'
'TXT_CONTEXT_MENU;;GUI_CTX;M;;;;;;;;;;000;;;;;|'
'TXT_CONTROLLER;;O2COEXT;M;;;;;;;;;;000;;;;;|'
'TXT_CONTROLLER_CLASS;;O2CTRCLS;D;;;;;;;;;;000;;;;;|'
'TXT_CONTROL_COMPOSITE_NAME;;CC_NAME;L;;;;;;;;;;000;;;;;|'
'TXT_CONVERSION_EXIT;;SCRFUCNV;D;;;;;;;;;;000;;;;;|'
'TXT_CONVERSION_FOR_AUTHORIZATI;;;;;;;;;;;;;;;;;;|'
'TXT_CONVERS_ROUTINE;;KCD_KONVR;M;;;;;;;;;;000;;;;;|'
'TXT_CREATED;;CATS_ERSDA;S;;;;;;;;;;000;;;;;|'
'TXT_CREATED_BY___1;;UDFUSER;S;;;;;;;;;;000;;;;;|'
'TXT_CREATED_BY___2;;CNAM;M;;;;;;;;;;000;;;;;|'
'TXT_CREATED_ON;;CRDATE;D;;;;;;;;;;000;;;;;|'
'TXT_CREATE_STATEMENT;;;;;;;;;;;;;000;;;;;|'
'TXT_CREATION_DATE;;SALRTDCRED;M;;;;;;;;;;;;;;;|'
'TXT_CROSS_CLIENT;;SWBCLIENTX;M;;;;;;;;;;;;;;;|'
'TXT_CUA_LOAD;;STA_CLTIMI;S;;;;;;;;;;000;;;;;|'
'TXT_CURRENCY;;RSCURRENCY;M;;;;;;;;;;000;;;;;|'
'TXT_CURSOR_POSITION;;SCRHCUPO;M;;;;;;;;;;000;;;;;|'
'TXT_DATABASE_CONTENT;;;;;;;;;;;;;000;;;;;|'
'TXT_DATABASE_DATA;;;;;;;;;;;;;000;;;;;|'
'TXT_DATABASE_INFORMATION;;;;;;;;;;;;;000;;;;;|'
'TXT_DATABASE_SYSTEM;;SYDBSYS;M;;;;;;;;;;000;;;;;|'
'TXT_DATABASE_TABLES;;EX_CDT;M;;;;;;;;;;000;;;;;|'
'TXT_DATA_BROWSER_TABLE_VIEW_MA;;;;;;;;;;;;;000;;;;;|'
'TXT_DATA_CLASS;;TABART;M;;;;;;;;;;000;;;;;|'
'TXT_DATA_COLLECTION;;SLDPH;T;;;;;;;;;;000;;;;;|'
'TXT_DATA_ELEM;;DATAELEM;S;;;;;;;;;;000;;;;;|'
'TXT_DATA_ELEMENTS;;CLASSDE;M;;;;;;;;;;000;;;;;|'
'TXT_DATA_ELEMENT___1;;DATAELEM;M;;;;;;;;;;000;;;;;|'
'TXT_DATA_ELEMENT___2;;SCRP_DATN;T;;;;;;;;;;000;;;;;|'
'TXT_DATA_TYPE;;DATATYPE_D;M;;;;;;;;;;000;;;;;|'
'TXT_DBSL_PATCH_LEVEL;;;;;;;;;;;;;000;;;;;|'
'TXT_DBSL_VERSION;;DB_DBSLV;M;;;;;;;;;;000;;;;;|'
'TXT_DB_CLIENT_LIB;;DB_CLIREL;M;;;;;;;;;;000;;;;;|'
'TXT_DB_RELEASES;;DB_RELTEXT;M;;;;;;;;;;000;;;;;|'
'TXT_DECIMAL_PLACES___M;;DECIMALS;M;;;;;;;;;;000;;;;;|'
'TXT_DECIMAL_PLACES___T;;DECIMALS;T;;;;;;;;;;000;;;;;|'
'TXT_DEFAULTS;;VALEXI;S;;;;;;;;;;000;;;;;|'
'TXT_DEFAULT_COMPONENT_NAME;;DEFFDNAME;T;;;;;;;;;;000;;;;;|'
'TXT_DEFAULT_PREFIX;;;;;;;;;;;;;;;;;;|'
'TXT_DEFAULT_VALUES;;;;;;;;;;;;;000;;;;;|'
'TXT_DEFAULT_VALUES_FOR;;;;;;;;;;;;;000;;;;;|'
'TXT_DEFAULT_VALUE___1;;DDSHDEFVAL;T;;;;;;;;;;000;;;;;|'
'TXT_DEFAULT_VALUE___2;;RS38L_DEFO;M;;;;;;;;;;000;;;;;|'
'TXT_DEFINITION;;UFDYDOCU;M;;;;;;;;;;000;;;;;|'
'TXT_DEFLG;;SCRFLENG;M;;;;;;;;;;000;;;;;|'
'TXT_DELIVERY_AND_MAINTENANCE;;;;;;;;;;;;;000;;;;;|'
'TXT_DELIVERY_CLASS;;DIP0220;D;;;;;;;;;;000;;;;;|'
'TXT_DELTA_HANDLING;;O2DELTA;M;;;;;;;;;;000;;;;;|'
'TXT_DESCRIPTION;;SEODESCR;M;;;;;;;;;;000;;;;;|'
'TXT_DESELECT_ALL;;;;;;@4D@;S;;;;;;;;;;;|'
'TXT_DFLT_VALUE;;SWLWPPVDEF;T;;;;;;;;;;;;;;;|'
'TXT_DIALOG_BEHAVIOR;;;;;;;;;;;;;000;;;;;|'
'TXT_DIALOG_DATA_TRANSPORT_DETA;;;;;;;;;;;;;000;;;;;|'
'TXT_DIALOG_TRANSACTION;;EUSEL_TRAN;L;;;;;;;;;;000;;;;;|'
'TXT_DIALOG_TYPE;;DDSHDIATYP;M;;;;;;;;;;000;;;;;|'
'TXT_DICTIONARY_REFERENCE;;STEXTA;T;;;;;;;;;;000;;;;;|'
'TXT_DICT_FIELD;;SCRFDICT;M;;;;;;;;;;000;;;;;|'
'TXT_DICT_MODIFIED;;SCRFDMOD;M;;;;;;;;;;000;;;;;|'
'TXT_DICT_OBJS;;EX_BD;M;;;;;;;;;;000;;;;;|'
'TXT_DIRECTORY;;SCMS_FTPDI;M;;;;;;;;;;000;;;;;|'
'TXT_DISABLED;;ALEDISABL;M;;;;;;;;;;000;;;;;|'
'TXT_DISPLAY;;PUSH_SHOW;M;;;;;;;;;;000;;;;;|'
'TXT_DISPLAY_ATTR;;;;;;;;;;;;;000;;;;;|'
'TXT_DLEN;;DDINTLENG;T;;;;;;;;;;000;;;;;|'
'TXT_DOCUMENTATION;;RS38L_DOCU;M;;;;;;;;;;000;;;;;|'
'TXT_DOMAIN;;DOMNAME;M;;;;;;;;;;000;;;;;|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_DOMAINS;;CLASSDOM;M;;;;;;;;;;000;;;;;|'
'TXT_DROPDOWN;;SCRFDRDOWN;M;;;;;;;;;;000;;;;;|'
'TXT_DTYP;;DDVIEWDTYP;T;;;;;;;;;;000;;;;;|'
'TXT_DYNAMIC_CONTEXT_MENU;;SCRPMENDY;L;;;;;;;;;;000;;;;;|'
'TXT_DYNAMIC_VALUE_ALLOWED;;;;;;;;;;;;;;;;;;|'
'TXT_EASY_WEB_TRANSACTION;;S_EWT;T;;;;;;;;;;000;;;;;|'
'TXT_EDITOR_LOCK;;IW_NO_EDIT;M;;;;;;;;;;000;;;;;|'
'TXT_EDIT_LOCK;;;;;;;;;;;;;000;;;;;|'
'TXT_ELEMENTARY_SRCH_HLP;;DDSHLPELEM;T;;;;;;;;;;000;;;;;|'
'TXT_ELEMENTARY_TYPE;;CHK_ELEM;M;;;;;;;;;;000;;;;;|'
'TXT_ELEMENT_CONTENT;;;;;;;;;;;;;;;;;;|'
'TXT_ELEMENT_HANDLER_CLASS;;;;;;;;;;;;;;;;;;|'
'TXT_ELEMENT_INTERPRETS_CONTENT;;;;;;;;;;;;;;;;;;|'
'TXT_ELEMENT_LIST;;SCRAFNFL;M;;;;;;;;;;000;;;;;|'
'TXT_EMPTY_TAB;;;;;;;;;;;;;000;;;;;|'
'TXT_ENHANCEMENT_CATEGORY;;DDEXTCLASS;D;;;;;;;;;;000;;;;;|'
'TXT_ENHANCEMENT_CATEGORY_FOR_S;;;;;;;;;;;;;000;;;;;|'
'TXT_ENTER_A_PACKAGE;;;;;;;;;;;;PACKAGE_BUILDER01;201;;;;;|'
'TXT_ENTRY;;SCRFFSTR;D;;;;;;;;;;000;;;;;|'
'TXT_ENTRY_HELP;;SCRFCMBFOC;M;;;;;;;;;;000;;;;;|'
'TXT_EQ;;;;;;;;;;;;;000;;;;;|'
'TXT_ERROR_HANDLING;;EDI_ERRFLG;M;;;;;;;;;;000;;;;;|'
'TXT_ERROR_SEVERITY;;ERRORTYP;L;;;;;;;;;;000;;;;;|'
'TXT_EVENT;;SEOEVTNAME;M;;;;;;;;;;000;;;;;|'
'TXT_EVENTS;;SE30OKEVNT;S;;;;;;;;;;000;;;;;|'
'TXT_EVENT_HANDLER;;O2EVHNAME;M;;;;;;;;;;000;;;;;|'
'TXT_EXCEPTIONS;;RS38L_EXCE;M;;;;;;;;;;000;;;;;|'
'TXT_EXCEPTION___1;;SWF_CX_REF;M;;;;;;;;;;000;;;;;|'
'TXT_EXCEPTION___2;;RS38L_EXCN;M;;;;;;;;;;000;;;;;|'
'TXT_EXCLUSIVE;;CLEXCL;M;;;;;;;;;;000;;;;;|'
'TXT_EXP;;SHLPOUTPUT;T;;;;;;;;;;000;;;;;|'
'TXT_EXPORT;;RS38L_PAEX;S;;;;;;;;;;000;;;;;|'
'TXT_FIELD;;FIELDNAME;S;;;;;;;;;;000;;;;;|'
'TXT_FIELDS;;CLASSFEL;M;;;;;;;;;;000;;;;;|'
'TXT_FIELD_LABEL;;OTXT;M;;;;;;;;;;000;;;;;|'
'TXT_FIELD_NAME;;FELD_NAME;M;;;;;;;;;;000;;;;;|'
'TXT_FINAL;;SEOFINAL;M;;;;;;;;;;000;;;;;|'
'TXT_FIRST_PAGE;;S_INITPAGE;M;;;;;;;;;;000;;;;;|'
'TXT_FIXED_FONT;;SCRFFIXF;M;;;;;;;;;;000;;;;;|'
'TXT_FIXED_POINT_ARITHMETIC;;FIXPT;D;;;;;;;;;;000;;;;;|'
'TXT_FIX_VAL;;VAL_SINGLE;T;;;;;;;;;;000;;;;;|'
'TXT_FLOW_LOGIC;;DYNTXLINE;M;;;;;;;;;;000;;;;;|'
'TXT_FOREIGN_KEY;;SCRFFFKY;M;;;;;;;;;;000;;;;;|'
'TXT_FOREIGN_SOURCE_SYSTEM;;;;;;@6L@;S;;;;;;000;;;;;|'
'TXT_FORMAT;;SCRFTYPE;M;;;;;;;;;;000;;;;;|'
'TXT_FORMATTING;;SYPRORIENT;M;;;;;;;;;;000;;;;;|'
'TXT_FORWARD_DECLARATIONS;;;;;;;;;;;;;000;;;;;|'
'TXT_FRAMESET;;IW_FRMOBJ;M;;;;;;;;;;000;;;;;|'
'TXT_FRIENDS;;;;;;;;;;;;;000;;;;;|'
'TXT_FROM_MODULE_POOL;;;;;;;;;;;;;000;;;;;|'
'TXT_FULLY_BUFFERED;;;;;;;;;;;;;000;;;;;|'
'TXT_FUNCTIONAL_TYPE;;S_FUNCTYP;M;;;;;;;;;;000;;;;;|'
'TXT_FUNCTION_CODE;;FCODE;M;;;;;;;;;;000;;;;;|'
'TXT_FUNCTION_GROUP;;RS38L_AREA;T;;;;;;;;;;000;;;;;|'
'TXT_FUNCTION_GROUPS;;;;;;;;;;;;;000;;;;;|'
'TXT_FUNCTION_GROUP_DOC;;;;;;;;;;;;;000;;;;;|'
'TXT_FUNCTION_MODULE;;RSTFB;T;;;;;;;;;;000;;;;;|'
'TXT_FUNCTION_MODULES;;;;;;;;;;;;;000;;;;;|'
'TXT_FUNCTION_MODULE_DOCUMENTAT;;;;;;;;;;;;;000;;;;;|'
'TXT_FURTHER_CHARACTERISTICS;;;;;;;;;;;;;000;;;;;|'
'TXT_FURTHER_OPTIONS;;;;;;;;;;;;;;;;;;|'
'TXT_GENERAL_ATTR;;;;;;;;;;;;;000;;;;;|'
'TXT_GENERAL_DATA;;ALSHGNDTL;M;;;;;;;;;;000;;;;;|'
'TXT_GENERIC_AREA_BUFFERED;;;;;;;;;;;;;000;;;;;|'
'TXT_GET_PARAMETER;;SCRFFGPA;M;;;;;;;;;;000;;;;;|'
'TXT_GLOBAL;;RS38L_GLOB;M;;;;;;;;;;000;;;;;|'
'TXT_GROUP;;GROUP_NAME;M;;;;;;;;;;000;;;;;|'
'TXT_GROUP_1;;SCRFGRP1;M;;;;;;;;;;000;;;;;|'
'TXT_GROUP_2;;SCRFGRP2;M;;;;;;;;;;000;;;;;|'
'TXT_GROUP_3;;SCRFGRP3;M;;;;;;;;;;000;;;;;|'
'TXT_GROUP_4;;SCRFGRP4;M;;;;;;;;;;000;;;;;|'
'TXT_GUI_STATUS;;;;;;;;;;;;;000;;;;;|'
'TXT_GUI_SUPPORT;;;;;;;;;;;;;000;;;;;|'
'TXT_HEADING;;REPTEXT;M;;;;;;;;;;000;;;;;|'
'TXT_HEIGHT;;SCRNHIGH;M;;;;;;;;;;000;;;;;|'
'TXT_HELP;;SWL_HELP;M;;;;;;;;;;000;;;;;|'
'TXT_HIDDEN;;SUB_HIDDEN;M;;;;;;;;;;000;;;;;|'
'TXT_HIERARCHY;;UDHIERID;M;;;;;;;;;;000;;;;;|'
'TXT_HIGHEST_SUPPORT_PACKAGE;;;;;;;;;;;;;000;;;;;|'
'TXT_HOLD_DATA;;SCRHHDAT;M;;;;;;;;;;000;;;;;|'
'TXT_HOLD_SCROLL_POSITION;;SCRPKSCR;D;;;;;;;;;;000;;;;;|'
'TXT_HOST;;IACHOST;M;;;;;;;;;;000;;;;;|'
'TXT_HOST_DATA;;;;;;;;;;;;;000;;;;;|'
'TXT_HOT_KEY;;DDSHHOTKEY;M;;;;;;;;;;000;;;;;|'
'TXT_HTTPS;;HTTPS;M;;;;;;;;;;000;;;;;|'
'TXT_ICON;;SCRFICON;M;;;;;;;;;;000;;;;;|'
'TXT_ICON_NAME;;SCRFICON_N;M;;;;;;;;;;000;;;;;|'
'TXT_ICON_TEXT;;SCRFICON_Q;M;;;;;;;;;;000;;;;;|'
'TXT_IMMEDIATE_START_NO_RESTART;;;;;;;;;;;;;000;;;;;|'
'TXT_IMP;;SHLPINPUT;T;;;;;;;;;;000;;;;;|'
'TXT_IMPLEMENTATION;;;;;;;;;;;;;000;;;;;|'
'TXT_IMPLEMENTED_ACTIVE;;;;;;;;;;;;;000;;;;;|'
'TXT_IMPORT;;SAEIMPORT;S;;;;;;;;;;000;;;;;|'
'TXT_INACTIVE;;ALEDISABLD;S;;;;;;;;;;000;;;;;|'
'TXT_INCLUDE;;INCLNAME;M;;;;;;;;;;000;;;;;|'
'TXT_INCLUDES;;INCLU;S;;;;;;;;;;000;;;;;|'
'TXT_INCLUDE_NAME;;RSYNT_INCL;M;;;;;;;;;;000;;;;;|'
'TXT_INCLUSIVE;;CLINCL;M;;;;;;;;;;000;;;;;|'
'TXT_INFO;;BDL_INFO;S;;;;;;;;;;000;;;;;|'
'TXT_INFORMATION;;;;;;@0S@;S;;;;;;;;;;;|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_INHERIT_GUI_ATTRIBUTES;;;;;;;;;;;;;000;;;;;|'
'TXT_INITIALIZATION_AND_ACCESS;;;;;;;;;;;;;000;;;;;|'
'TXT_INITIAL_BSP;;;;;;;;;;;;;000;;;;;|'
'TXT_INITIAL_LINE_NUMBER;;;;;;;;;;;;;000;;;;;|'
'TXT_INITIAL_VALUE;;SEOVALUE;M;;;;;;;;;;000;;;;;|'
'TXT_INITIAL_VALUES;;HR_BIN_INI;M;;;;;;;;;;000;;;;;|'
'TXT_INPUT;;SCRFFEIN;M;;;;;;;;;;000;;;;;|'
'TXT_INSTALLATION_NUMBER;;DNOT_INSTN;T;;;;;;;;;;000;;;;;|'
'TXT_INSTANTIATION;;SEOCREATE;M;;;;;;;;;;000;;;;;|'
'TXT_INTERFACE;;SEOITFNAME;M;;;;;;;;;;000;;;;;|'
'TXT_INTERFACES;;EX_COI;M;;;;;;;;;;000;;;;;|'
'TXT_INTERFACE_COMPONENT;;SEOCPDNAME;T;;;;;;;;;;000;;;;;|'
'TXT_INTERFACE_DOCUMENTATION;;;;;;;;;;;;;000;;;;;|'
'TXT_INTERNALLY_RELEASED_ON;;;;;;;;;;;;;000;;;;;|'
'TXT_INTERNAL_NAME;;O2APPLNAME;T;;;;;;;;;;000;;;;;|'
'TXT_INTERVALS;;;;;;;;;;;;;000;;;;;|'
'TXT_INVISIBLE;;SCRFUNSI;M;;;;;;;;;;000;;;;;|'
'TXT_IP_ADDRESS;;RFCIP;M;;;;;;;;;;000;;;;;|'
'TXT_IS_ERROR_PAGE;;O2ERRPAG;M;;;;;;;;;;000;;;;;|'
'TXT_ITERATION_OVER_ELEMENT_CON;;O2ITERATION;L;;;;;;;;;;;;;;;|'
'TXT_JOIN_CONDITIONS;;;;;;;;;;;;;000;;;;;|'
'TXT_KERNEL_INFORMATION___1;;;;;;;;;;;;;000;;;;;|'
'TXT_KERNEL_INFORMATION___2;;;;;;;;;;;;;000;;;;;|'
'TXT_KERNEL_RELEASE;;SYKERNRL;M;;;;;;;;;;000;;;;;|'
'TXT_KEY;;OJ_KEY;M;;;;;;;;;;000;;;;;|'
'TXT_KEY_ATTRIBUTE_DEFINED_FOR1;;;;;;;;;;;;;000;;;;;|'
'TXT_KEY_ATTRIBUTE_DEFINED_FOR2;;;;;;;;;;;;;000;;;;;|'
'TXT_KEY_CATEGORY;;KEYKINDTXT;M;;;;;;;;;;000;;;;;|'
'TXT_KEY_COMPONENTS;;;;;;;;;;;;;000;;;;;|'
'TXT_KEY_DEFINITION;;;;;;;;;;;;;000;;;;;|'
'TXT_KEY___KEY;;KEYFLAG;T;;;;;;;;;;000;;;;;|'
'TXT_LANGUAGE;;LANGU;M;;;;;;;;;;000;;;;;|'
'TXT_LAST_CHANGED;;S_LSTTIME;T;;;;;;;;;;;;;;;|'
'TXT_LAST_CHANGED_AT;;U_TIME;M;;;;;;;;;;;;;;;|'
'TXT_LAST_CHANGED_BY___1;;UFTSTAMP;M;;;;;;;;;;000;;;;;|'
'TXT_LAST_CHANGED_BY___2;;UNAM;M;;;;;;;;;;000;;;;;|'
'TXT_LAST_CHANGED_BY___3;;LAST_USER;M;;;;;;;;;;000;;;;;|'
'TXT_LAST_CHANGED_ON;;SRMXMLLD;M;;;;;;;;;;000;;;;;|'
'TXT_LAST_CHANGED_ON_BY;;UFTSTAMP;D;;;;;;;;;;000;;;;;|'
'TXT_LAST_GENERATION;;SCRHGEND;T;;;;;;;;;;000;;;;;|'
'TXT_LAYOUT;;LAYVAR;M;;;;;;;;;;000;;;;;|'
'TXT_LEADING_ZEROS;;SCRFFILL;M;;;;;;;;;;000;;;;;|'
'TXT_LENGTH;;DDLENG;T;;;;;;;;;;000;;;;;|'
'TXT_LEVEL;;SEOATTDECL;S;;;;;;;;;;000;;;;;|'
'TXT_LICENSE_EXPIRATION;;;;;;;;;;;;;000;;;;;|'
'TXT_LIFETIME;;O2LIFETIME;M;;;;;;;;;;000;;;;;|'
'TXT_LINE;;SCRFLINE;M;;;;;;;;;;000;;;;;|'
'TXT_LINES;;SYSROWS;M;;;;;;;;;;000;;;;;|'
'TXT_LINE_TYPE;;SRET_RTYPE;M;;;;;;;;;;000;;;;;|'
'TXT_LIST_HEADER;;;;;;;;;;;;;000;;;;;|'
'TXT_LIST_HEADINGS;;;;;;;;;;;;;000;;;;;|'
'TXT_LOCAL_IN_PROGRAM;;EUSEL_LOC;M;;;;;;;;;;;;;;;|'
'TXT_LOCAL_TYPES;;;;;;;;;;;;;000;;;;;|'
'TXT_LOCK_MODE;;ENQMODE;M;;;;;;;;;;000;;;;;|'
'TXT_LOCK_OBJECTS;;CLASSSPO;M;;;;;;;;;;000;;;;;|'
'TXT_LOCK_OBJECT___1;;ENQUETAB;M;;;;;;;;;;000;;;;;|'
'TXT_LOCK_OBJECT___2;;E_ENQNAME;M;;;;;;;;;;000;;;;;|'
'TXT_LOCK_PARAMETER;;DDENQUPAR;M;;;;;;;;;;000;;;;;|'
'TXT_LOGICAL_DATABASE;;SYDBNAM;M;;;;;;;;;;000;;;;;|'
'TXT_LOGICAL_STORAGE_PARAMETERS;;;;;;;;;;;;;000;;;;;|'
'TXT_LOGON;;RSAULOGIN;S;;;;;;;;;;000;;;;;|'
'TXT_LOG_DATA_CHANGES;;DDPROTOCOL;D;;;;;;;;;;000;;;;;|'
'TXT_LONG;;SCRTEXT_L;S;;;;;;;;;;000;;;;;|'
'TXT_LONG_TEXT;;UFLONGNAME;M;;;;;;;;;;000;;;;;|'
'TXT_LOWERCASE;;TRWLOWCASE;M;;;;;;;;;;000;;;;;|'
'TXT_LOWER_LIMIT;;VAL_LOWER;M;;;;;;;;;;000;;;;;|'
'TXT_LPOS;;SHLPLISPOS;T;;;;;;;;;;000;;;;;|'
'TXT_MACHINE_TYPE;;;;;;;;;;;;;000;;;;;|'
'TXT_MACROS;;FORMINFOPK;M;;;;;;;;;;000;;;;;|'
'TXT_MAINTENANCE;;MAINTAUTH;M;;;;;;;;;;000;;;;;|'
'TXT_MAINTENANCE_OF_STANDARD_TR;;;;;;;;;;;;;;;;;;|'
'TXT_MAINTENANCE_SCREENS;;DYNP_MNT;L;;;;;;;;;;000;;;;;|'
'TXT_MAINTENANCE_TYPE;;MAINT_TYPE;T;;;;;;;;;;000;;;;;|'
'TXT_MAINT_SCREEN_NO;;;;;;;;;;;;;000;;;;;|'
'TXT_MAINT_STATUS;;VIEWGRANT;M;;;;;;;;;;000;;;;;|'
'TXT_MAIN_PACKAGE;;MAINPACK;M;;;;;;;;;;000;;;;;|'
'TXT_MAIN_PROGRAM;;ASTAT_PROG;T;;;;;;;;;;000;;;;;|'
'TXT_MANIPULATION_OF_ELEMENT_CO;;O2BODYWRITER;L;;;;;;;;;;;;;;;|'
'TXT_MAX_NO_OF_LINES;;BAPIMAXROW;L;;;;;;;;;;000;;;;;|'
'TXT_MEDIUM;;SCRTEXT_M;S;;;;;;;;;;000;;;;;|'
'TXT_MENU;;PPMENUE;M;;;;;;;;;;000;;;;;|'
'TXT_MESSAGE;;MSGNR;M;;;;;;;;;;;;;;;|'
'TXT_MESSAGES;;MESSAGES_D;M;;;;;;;;;;;;;;;|'
'TXT_MESSAGE_CLASS;;MSGID;T;;;;;;;;;;000;;;;;|'
'TXT_MESSAGE_CLASSES;;VRSMENU18;M;;;;;;;;;;;;;;;|'
'TXT_MESSAGE_SHORT_TEXT;;;;;;;;;;;;;;;;;;|'
'TXT_METHOD;;SEOMTDNAME;M;;;;;;;;;;000;;;;;|'
'TXT_METHODS;;SE30OKMETH;M;;;;;;;;;;000;;;;;|'
'TXT_METHOD_TYPE;;SEOMTDTYPE;M;;;;;;;;;;000;;;;;|'
'TXT_MIMES;;W3MIMLSELE;M;;;;;;;;;;000;;;;;|'
'TXT_MIME_TYPE;;SKWF_MIME;M;;;;;;;;;;000;;;;;|'
'TXT_MOD;;DDMODKZ;T;;;;;;;;;;000;;;;;|'
'TXT_MODAL_DIALOG_BOX;;SCRHTYPM;M;;;;;;;;;;000;;;;;|'
'TXT_MODE;;R3MODE;M;;;;;;;;;;000;;;;;|'
'TXT_MODELED_ONLY;;;;;;;;;;;;;000;;;;;|'
'TXT_MODIFIED;;TFMJMODIF;M;;;;;;;;;;000;;;;;|'
'TXT_MOD_GROUPS_FUNCTIONS;;;;;;;;;;;;;000;;;;;|'
'TXT_NAME;;CUNAM;M;;;;;;;;;;000;;;;;|'
'TXT_NAME_OF_REF_TYPE;;REFTYPNAME;M;;;;;;;;;;000;;;;;|'
'TXT_NAME_OF_SCREEN_FIELD;;;;;;;;;;;;;000;;;;;|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_NAVIGATION;;;;;;;;;;;;;000;;;;;|'
'TXT_NAVIGATION_REQUEST;;;;;;;;;;;;;000;;;;;|'
'TXT_NEXT_SCREEN;;SCRHFNUM;M;;;;;;;;;;000;;;;;|'
'TXT_NO;;;;XFELD;;;;;;;;;000;;;;;|'
'TXT_NORMAL;;SCRHTYPN;M;;;;;;;;;;000;;;;;|'
'TXT_NORMAL_FUNCTION_MODULE;;RS38L_NORM;T;;;;;;;;;;000;;;;;|'
'TXT_NOT_RELEASED;;;;SEORELSTAT;0;;;;;;;;000;;;;;|'
'TXT_NO_LENGTH_RESTRICTION;;;;;;;;;;;;;000;;;;;|'
'TXT_NO_OF_CHARACTERS;;DDLENG;M;;;;;;;;;;000;;;;;|'
'TXT_NO_OF_KEY_FIELDS;;;;;;;;;;;;;000;;;;;|'
'TXT_NO_OR_USER_RECORDING_ROUTI;;CORR_CON_I;T;;;;;;;;;;000;;;;;|'
'TXT_NO_RESET;;SCRFFNRS;D;;;;;;;;;;000;;;;;|'
'TXT_OBJECT;;XUOBJECT;M;;;;;;;;;;;;;;;|'
'TXT_OBJECTS;;SCIOBJCNT;T;;;;;;;;;;000;;;;;|'
'TXT_OBJECT_TRANSACTION;;EUSEL_CLS;L;;;;;;;;;;000;;;;;|'
'TXT_OBJECT_TYPE;;OBJECTTYP;M;;;;;;;;;;000;;;;;|'
'TXT_OCCUPIED;;S_SEATSOCC;S;;;;;;;;;;000;;;;;|'
'TXT_ONE_STEP;;MTYPE1;M;;;;;;;;;;000;;;;;|'
'TXT_OO_TRANSACTION_MODEL;;;;;;;;;;;;;;;;;;|'
'TXT_OPERATING_SYSTEM;;SAAOPSYS;D;;;;;;;;;;000;;;;;|'
'TXT_OPERATOR;;VSOPERATOR;M;;;;;;;;;;000;;;;;|'
'TXT_OPTION;;SWFMOD_OPTION;M;;;;;;;;;;000;;;;;|'
'TXT_OPTIONAL;;RS38L_OPTI;S;;;;;;;;;;000;;;;;|'
'TXT_OPTIONS;;IWEXOPTT;M;;;;;;;;;;000;;;;;|'
'TXT_OP_RELEASE;;;;;;;;;;;;;000;;;;;|'
'TXT_ORIGINAL_LANG;;RS38L_MASL;M;;;;;;;;;;;;;;;|'
'TXT_ORIGINAL_LANGUAGE;;DD_LANGU;M;;;;;;;;;;000;;;;;|'
'TXT_ORIGIN_OF_THE_INPUT_HELP;;;;;;;;;;;;;000;;;;;|'
'TXT_OTHER_ATTRIBUTES;;;;;;;;;;;;;000;;;;;|'
'TXT_OUTPUT;;SCRFFOUT;M;;;;;;;;;;000;;;;;|'
'TXT_OUTPUT_CHARACTERISTICS;;;;;;;;;;;;;000;;;;;|'
'TXT_OUTPUT_LENGTH;;TTOUTLENG;M;;;;;;;;;;000;;;;;|'
'TXT_OUTPUT_ONLY;;SCRFOOUT;M;;;;;;;;;;000;;;;;|'
'TXT_OVERVIEW_SCREEN;;LIST_SCR;M;;;;;;;;;;000;;;;;|'
'TXT_OWNER;;PTOWNER;M;;;;;;;;;;000;;;;;|'
'TXT_PACKAGE;;DEVCLASS;M;;;;;;;;;;000;;;;;|'
'TXT_PACKAGES_INCLUDED;;;;;;;;;;;;;000;;;;;|'
'TXT_PACKAGE_CHECK_AS_CLIENT;;;;;;;;;;;;;000;;;;;|'
'TXT_PACKAGE_CHECK_AS_SERVER;;;;;;;;;;;;;000;;;;;|'
'TXT_PACKAGE_INTERFACE;;SCOMIFNAM;M;;;;;;;;;;000;;;;;|'
'TXT_PACKAGE_INTERFACES;;EX_CKI;M;;;;;;;;;;000;;;;;|'
'TXT_PACKAGE_NOT_EXTENDABLE;;;;;;;;;;;;;000;;;;;|'
'TXT_PACKAGE_PROPERTIES;;;;;;;;;;;;;000;;;;;|'
'TXT_PAGE;;O2PAGE;M;;;;;;;;;;000;;;;;|'
'TXT_PAGES_WITH_FLOW_LOGIC;;;;;;;;;;;;;000;;;;;|'
'TXT_PAGE_ATTRIBUTES;;;;;;;;;;;;;000;;;;;|'
'TXT_PAGE_DONE_IS_NOT_RETURNED_;;;;;;;;;;;;;;;;;;|'
'TXT_PAGE_FRAGMENT;;;;O2PAGTYP;X;;;;;;;;000;;;;;|'
'TXT_PAGE_FRAGMENTS;;;;;;;;;;;;;000;;;;;|'
'TXT_PAGE_TYPE;;O2PAGTYP;M;;;;;;;;;;000;;;;;|'
'TXT_PAGE_WITH_FLOW_LOGIC;;;;O2PAGTYP;;;;;;;;;000;;;;;|'
'TXT_PARAMETER;;PARAM_011A;M;;;;;;;;;;000;;;;;|'
'TXT_PARAMETERS;;PARNAME;T;;;;;;;;;;000;;;;;|'
'TXT_PARAMETER_ID;;PARID;M;;;;;;;;;;000;;;;;|'
'TXT_PARAMETER_NAME;;PARAMETER;M;;;;;;;;;;000;;;;;|'
'TXT_PARAMETER_TRANSACTION;;EUSEL_PARA;L;;;;;;;;;;000;;;;;|'
'TXT_PASS_VALUE;;RS38L_VAL;M;;;;;;;;;;000;;;;;|'
'TXT_PERSON_RESPONS;;CGPL_RESPONSIBLE;M;;;;;;;;;;;;;;;|'
'TXT_PERSON_RESPONSIBLE___1;;SCI_USER;T;;;;;;;;;;000;;;;;|'
'TXT_PERSON_RESPONSIBLE___2;;AUTHOR3;T;;;;;;;;;;000;;;;;|'
'TXT_PERVASIVE_ENABLED;;S_PERVAS;T;;;;;;;;;;000;;;;;|'
'TXT_PLATFORM_ID;;SCE_PLID;M;;;;;;;;;;000;;;;;|'
'TXT_PLEASE_ENTER_A_ROOT_DIR;;;;;;;;;;;;SHDI;002;;;;;|'
'TXT_PLEASE_ENTER_A_VALID_PATH;;;;;;;;;;;;UD;851;;;;;|'
'TXT_POOLED_TABLE;;;;;;;;;;;;;000;;;;;|'
'TXT_POOL_CLUSTER;;CLASSPC;M;;;;;;;;;;000;;;;;|'
'TXT_POSITION;;DDPOSD;M;;;;;;;;;;000;;;;;|'
'TXT_POSS_ENTRIES_KEY;;SCRFCMBPRM;M;;;;;;;;;;000;;;;;|'
'TXT_PREVIOUS_LOGON;;;;;;;;;;;;;000;;;;;|'
'TXT_PRIMARY_TABLE;;ROOTTAB;M;;;;;;;;;;000;;;;;|'
'TXT_PROCESSING_TYPE;;CDUPDATE;M;;;;;;;;;;000;;;;;|'
'TXT_PRODUCT_UNDER_GPL;;;;;;;;;;;;;000;;;;;|'
'TXT_PROFESSIONAL_USER_TRANSACT;;S_PROF;T;;;;;;;;;;000;;;;;|'
'TXT_PROGRAM;;PROGRAM_ID;M;;;;;;;;;;000;;;;;|'
'TXT_PROGRAMS;;CLASSPROG;M;;;;;;;;;;000;;;;;|'
'TXT_PROGRAM_GUI;;;;;;;;;;;;;000;;;;;|'
'TXT_PROGRAM_NAME;;PRGNAME;M;;;;;;;;;;000;;;;;|'
'TXT_PROGRAM_SCREEN;;;;;;;;;;;;;000;;;;;|'
'TXT_PROGRAM_STATUS;;PROG_STAT;M;;;;;;;;;;000;;;;;|'
'TXT_PROPERTIES;;COCOFPRO;M;;;;;;;;;;000;;;;;|'
'TXT_PROPERTY_LIST;;SCRFPRSHOW;M;;;;;;;;;;000;;;;;|'
'TXT_QUANTITY_FIELD;;FQUAN;D;;;;;;;;;;000;;;;;|'
'TXT_READ_ONLY;;FIELD_READ;M;;;;;;;;;;000;;;;;|'
'TXT_RECORDING_ROUTINE;;;;;;;;;;;;;000;;;;;|'
'TXT_REFERENCES;;;;;;;;;;;;;000;;;;;|'
'TXT_REFERENCE_FIELD;;SCRFWAER;M;;;;;;;;;;000;;;;;|'
'TXT_REFERENCE_TABLE;;REFTABLE;M;;;;;;;;;;000;;;;;|'
'TXT_REFERENCE_TO_PREDEFINED_TY;;;;;;;;;;;;;000;;;;;|'
'TXT_REFERENCE_TYPE;;CLASSNAME;M;;;;;;;;;;000;;;;;|'
'TXT_REF_FIELD;;REFFIELD;M;;;;;;;;;;000;;;;;|'
'TXT_RELEASE;;TDFRELES;M;;;;;;;;;;000;;;;;|'
'TXT_RELEASED_INTERNALLY;;;;SEORELSTAT;1;;;;;;;;000;;;;;|'
'TXT_REMOTE_ENABLED_MODULE;;;;;;;;;;;;;000;;;;;|'
'TXT_REPORT;;SYREPID;T;;;;;;;;;;000;;;;;|'
'TXT_REPORT_TRANSACTION;;EUSEL_REPO;L;;;;;;;;;;000;;;;;|'
'TXT_REPOSITORY_DATA;;;;;;;;;;;;;000;;;;;|'
'TXT_REQUIRED;;SPO_OBL;M;;;;;;;;;;;;;;;|'
'TXT_RESP_TO_DBLCLK;;SCRPDBCL;M;;;;;;;;;;000;;;;;|'
'TXT_RESTRICT;;;;;;;;;;;;;000;;;;;|'
'TXT_RIGHT_JUST;;SCRFFJUS;M;;;;;;;;;;000;;;;;|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_RSYN_FILE;;;;;;;;;;;;;000;;;;;|'
'TXT_RTYPE;;F_REFTYPE;T;;;;;;;;;;000;;;;;|'
'TXT_SAPGUI_FOR_HTML;;S_WEBGUI;T;;;;;;;;;;000;;;;;|'
'TXT_SAPGUI_FOR_JAVA;;S_PLATIN;T;;;;;;;;;;000;;;;;|'
'TXT_SAPGUI_FOR_WINDOWS;;S_WIN32;T;;;;;;;;;;000;;;;;|'
'TXT_SAP_DATA;;;;;;;;;;;;;000;;;;;|'
'TXT_SAP_SYSTEM_DATA;;;;;;;;;;;;;000;;;;;|'
'TXT_SAP_VERSIONS;;;;;;;;;;;;;000;;;;;|'
'TXT_SAVED;;XUSAVED;S;;;;;;;;;;000;;;;;|'
'TXT_SCREEN;;DYNPRONR;S;;;;;;;;;;000;;;;;|'
'TXT_SCREENS;;CLASSDYNP;M;;;;;;;;;;000;;;;;|'
'TXT_SCREEN_FOR;;;;;;;;;;;;;000;;;;;|'
'TXT_SCREEN_GROUP;;SCRHDGRP;M;;;;;;;;;;000;;;;;|'
'TXT_SCREEN_NUMBER;;SCRADNUM;M;;;;;;;;;;000;;;;;|'
'TXT_SCREEN_TYPE;;SCRHTYPE;M;;;;;;;;;;000;;;;;|'
'TXT_SCROLLABLE;;SCRFSCROLL;M;;;;;;;;;;000;;;;;|'
'TXT_SDIS;;SHLPSELDIS;T;;;;;;;;;;000;;;;;|'
'TXT_SEARCH_HELP;;ISIS_CONTRACT_SHLP;M;;;;;;;;;;000;;;;;|'
'TXT_SEARCH_HELP_EXIT;;DDSHSELEXT;T;;;;;;;;;;000;;;;;|'
'TXT_SEARCH_HELP_PARAMETER;;SHLPFIELD;T;;;;;;;;;;000;;;;;|'
'TXT_SEC;;EDI_DISSEC;S;;;;;;;;;;000;;;;;|'
'TXT_SECONDARY_TABLES;;;;;;;;;;;;;000;;;;;|'
'TXT_SELECTION;;OPTSEL;M;;;;;;;;;;000;;;;;|'
'TXT_SELECTION_CONDITIONS;;;;;;;;;;;;;000;;;;;|'
'TXT_SELECTION_CRITERIA;;INSTMARK;D;;;;;;;;;;000;;;;;|'
'TXT_SELECTION_METHOD;;SELMETHOD;T;;;;;;;;;;000;;;;;|'
'TXT_SELECTION_SCREEN;;SCRHTYPS;M;;;;;;;;;;000;;;;;|'
'TXT_SELECTION_SCREEN_VERSION;;RDIR_TYPE;D;;;;;;;;;;000;;;;;|'
'TXT_SELECTION_TEXTS;;SELE;D;;;;;;;;;;000;;;;;|'
'TXT_SELECT_ALL;;;;;;@4B@;S;;;;;;;;;;;|'
'TXT_SELF_EXPLANATY;;;;;;;;;;;;;;;;;;|'
'TXT_SERVER_CACHE;;O2SCACHE;M;;;;;;;;;;000;;;;;|'
'TXT_SERVER_NAME;;SNAME;M;;;;;;;;;;000;;;;;|'
'TXT_SERVICE;;IACSERVIC_;T;;;;;;;;;;000;;;;;|'
'TXT_SETTINGS;;SIN_SETTCO;D;;;;;;;;;;000;;;;;|'
'TXT_SET_GET_PARAMETERS;;;;;;;;;;;;;;;;;;|'
'TXT_SET_PARAMETER;;SCRFFSPA;M;;;;;;;;;;000;;;;;|'
'TXT_SHARED_MEMORY_ENABLED;;;;;;;;;;;;;000;;;;;|'
'TXT_SHORT;;SCRTEXT_S;S;;;;;;;;;;000;;;;;|'
'TXT_SHORT_DESCRIPTION_OF_SOFTW;;COMP_DESC;T;;;;;;;;;;000;;;;;|'
'TXT_SHORT_DESCRIPTION___1;;DDVIEWSTXT;M;;;;;;;;;;000;;;;;|'
'TXT_SHORT_DESCRIPTION___2;;O2DESCR;T;;;;;;;;;;000;;;;;|'
'TXT_SHORT_TEXT___1;;PARAMTEXT;M;;;;;;;;;;000;;;;;|'
'TXT_SHORT_TEXT___2;;AS4TEXT;M;;;;;;;;;;000;;;;;|'
'TXT_SIGN;;SIGNFLAG;M;;;;;;;;;;000;;;;;|'
'TXT_SINGLE_RECORDS_BUFF;;;;;;;;;;;;;000;;;;;|'
'TXT_SINGLE_SCREEN;;EDYNR;M;;;;;;;;;;000;;;;;|'
'TXT_SINGLE_VARS;;;;;;;;;;;;;000;;;;;|'
'TXT_SIZE_CATEGORY;;TABKAT;M;;;;;;;;;;000;;;;;|'
'TXT_SKIP_INITIAL_SCREEN;;;;;;;;;;;;;000;;;;;|'
'TXT_SOFTWARE_COMPONENT;;DLVUNIT;D;;;;;;;;;;000;;;;;|'
'TXT_SOURCECDE;;QUELLTEXT;T;;;;;;;;;;000;;;;;|'
'TXT_SOURCE_CODE;;QUELLTEXT;M;;;;;;;;;;000;;;;;|'
'TXT_SPECIAL_ATTR;;;;;;;;;;;;;000;;;;;|'
'TXT_SPOS;;SHLPSELPOS;T;;;;;;;;;;000;;;;;|'
'TXT_SRCH_HELP;;DDTABSHLP;M;;;;;;;;;;000;;;;;|'
'TXT_SRCH_HELPS;;CLASSSHLP;S;;;;;;;;;;000;;;;;|'
'TXT_STANDARD_RECORDING_ROUTINE;;CORR_CON_S;T;;;;;;;;;;000;;;;;|'
'TXT_START;;PIS_START;M;;;;;;;;;;000;;;;;|'
'TXT_START_DELAYED;;RS38L_TSK2;M;;;;;;;;;;000;;;;;|'
'TXT_START_IMMED;;RS38L_TSK1;M;;;;;;;;;;000;;;;;|'
'TXT_START_USING_VARIANT;;;;;;;;;;;;;000;;;;;|'
'TXT_START_WITH_VARIANT;;;;;;;;;;;;;000;;;;;|'
'TXT_STATEFUL;;O2STATEFUL;L;;;;;;;;;;000;;;;;|'
'TXT_STATUS;;RSTATT;M;;;;;;;;;;000;;;;;|'
'TXT_STRUCTURE;;CLASSSTRU;M;;;;;;;;;;000;;;;;|'
'TXT_STRUCTURED_ROW_TYPE;;;;;;;;;;;;;000;;;;;|'
'TXT_STRUCTURED_TYPE;;;;;;;;;;;;;000;;;;;|'
'TXT_STRUCTURES;;EX_CDS;M;;;;;;;;;;000;;;;;|'
'TXT_SUBSCREEN;;SCRHTYPI;M;;;;;;;;;;000;;;;;|'
'TXT_SUPERCLASS;;;;;;;;;;;;;000;;;;;|'
'TXT_SUPPLEMENTARY_DOCUMENTATIO;;;;;;;;;;;;;000;;;;;|'
'TXT_SUPPORTS_PORTAL_INTEGRATIO;;;;;;;;;;;;;000;;;;;|'
'TXT_SUP_PKG_LVL;;SAPPATCHLV;M;;;;;;;;;;000;;;;;|'
'TXT_SURROUNDING_PACKAGE;;PACKPARENT;M;;;;;;;;;;000;;;;;|'
'TXT_SWITCH_OFF_RUNTIME_COMPRES;;SCRPCOMP;D;;;;;;;;;;000;;;;;|'
'TXT_SYMBOL;;SU0SYMBOL;M;;;;;;;;;;000;;;;;|'
'TXT_SYSTEM;;PBFORSYS;S;;;;;;;;;;000;;;;;|'
'TXT_SYSTEM_INFORMATION;;;;;;;;;;;;;000;;;;;|'
'TXT_SYSTEM_TIME;;;;;;;;;;;;;000;;;;;|'
'TXT_TABLE;;DDTABTYPE;M;;;;;;;;;;000;;;;;|'
'TXT_TABLES;;CLASSTAB;M;;;;;;;;;;000;;;;;|'
'TXT_TABLE_MAINTENANCE_GENERATO;;;;;;;;;;;;;000;;;;;|'
'TXT_TABLE_TYPE;;SQLTSCLASS;T;;;;;;;;;;000;;;;;|'
'TXT_TABLE_TYPES;;EX_CDA;M;;;;;;;;;;000;;;;;|'
'TXT_TARGET;;SDBA_TTSP;M;;;;;;;;;;000;;;;;|'
'TXT_TECHNICAL_DIALOG_DETAILS;;;;;;;;;;;;;000;;;;;|'
'TXT_TECHNICAL_SETTINGS;;;;;;;;;;;;;000;;;;;|'
'TXT_TEMPLATE_NON_EXECUTABLE;;SCRPNOGEN;D;;;;;;;;;;000;;;;;|'
'TXT_TEXT;;SGTXT;M;;;;;;;;;;000;;;;;|'
'TXT_TEXTS_IO_TEMPLATES;;;;;;;;;;;;;000;;;;;|'
'TXT_TEXT_ELEMENTS;;TEXTELEM;M;;;;;;;;;;000;;;;;|'
'TXT_TEXT_OR_IO_FIELD;;;;;;;;;;;;;000;;;;;|'
'TXT_TEXT_TABLE;;DDTABTYPE;M;;;;;;;;;;000;;;;;|'
'TXT_THEME;;O2THEME;M;;;;;;;;;;000;;;;;|'
'TXT_TIME_CHANGED;;UPTIM;M;;;;;;;;;;;;;;;|'
'TXT_TITLE;;REPTI;S;;;;;;;;;;000;;;;;|'
'TXT_TRANSACTION;;TRANSAKT;M;;;;;;;;;;000;;;;;|'
'TXT_TRANSACTIONS;;TRNSAKT;M;;;;;;;;;;000;;;;;|'
'TXT_TRANSACTION_CLASSIFICATION;;;;;;;;;;;;;000;;;;;|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_TRANSACTION_CODE;;TCODEL;D;;;;;;;;;;;;;;;|'
'TXT_TRANSACTION_TEXT;;TTEXT_STCT;T;;;;;;;;;;000;;;;;|'
'TXT_TRANSACTION_VARIANT;;TCVARIANT;D;;;;;;;;;;;;;;;|'
'TXT_TRANSFER_OPTIONS;;;;;;;;;;;;;000;;;;;|'
'TXT_TRANSFORMATION;;SWFEXTRANS;M;;;;;;;;;;000;;;;;|'
'TXT_TRANSFORMATIONS;;;;;;;;;;;;;000;;;;;|'
'TXT_TRANSPORT_ATTRIBUTES;;OB_TADIR;T;;;;;;;;;;000;;;;;|'
'TXT_TRANSPORT_LAYER;;DEVLAYER;L;;;;;;;;;;000;;;;;|'
'TXT_TRANSP_TABLE;;;;;;;;;;;;;000;;;;;|'
'TXT_TWO_STEP;;MTYPE2;M;;;;;;;;;;000;;;;;|'
'TXT_TYPES;;SPAR_TYP;M;;;;;;;;;;000;;;;;|'
'TXT_TYPE_DEFINITIONS;;;;;;;;;;;;;000;;;;;|'
'TXT_TYPE_GROUP;;TYPEGROUP;M;;;;;;;;;;000;;;;;|'
'TXT_TYPE_GRPS;;CLASSTYGR;S;;;;;;;;;;000;;;;;|'
'TXT_TYPE_IS_GENERIC;;;;;;;;;;;;;000;;;;;|'
'TXT_TYPE_OF_SCREEN_ELEMENT;;SCRFGTYP;D;;;;;;;;;;000;;;;;|'
'TXT_TYPE_SPEC;;RSFBTYPEF;T;;;;;;;;;;000;;;;;|'
'TXT_TYPE___1;;OB_TYP;M;;;;;;;;;;000;;;;;|'
'TXT_TYPE___2;;KIND;M;;;;;;;;;;000;;;;;|'
'TXT_TYPING;;SEOTYPTYPE;M;;;;;;;;;;000;;;;;|'
'TXT_TYPINGMETH;;O2TYPTYPT;S;;;;;;;;;;000;;;;;|'
'TXT_TYPING_METHOD;;O2TYPTYPE;M;;;;;;;;;;;;;;;|'
'TXT_UNICODE_CHECKS;;UCCHECK;M;;;;;;;;;;000;;;;;|'
'TXT_UNICODE_SYSTEM;;;;;;;;;;;;;000;;;;;|'
'TXT_UPDATES;;DB2CXUPDTE;M;;;;;;;;;;000;;;;;|'
'TXT_UPDATE_MODULE;;RS38L_TSK;T;;;;;;;;;;000;;;;;|'
'TXT_UPPERLIMIT;;VAL_UPPER;M;;;;;;;;;;000;;;;;|'
'TXT_UPPER_LOWER_CASE_ENTRY;;SCRFFGKS;D;;;;;;;;;;000;;;;;|'
'TXT_URL;;O2URL;M;;;;;;;;;;000;;;;;|'
'TXT_USAGE_DATA;;;;;;;;;;;;;000;;;;;|'
'TXT_USER;;UNAME;S;;;;;;;;;;000;;;;;|'
'TXT_USER_DEFINED_VALIDATION;;O2VALIDATE;L;;;;;;;;;;;;;;;|'
'TXT_USE_ACCESS;;PERMISFLAG;L;;;;;;;;;;000;;;;;|'
'TXT_VALUE;;EU_PARA_VL;M;;;;;;;;;;000;;;;;|'
'TXT_VALUES;;VAL70;M;;;;;;;;;;000;;;;;|'
'TXT_VALUE_LIST;;SCRFCMBFRM;M;;;;;;;;;;000;;;;;|'
'TXT_VALUE_RANGE;;SQLTTEXT50;M;;;;;;;;;;000;;;;;|'
'TXT_VARIANT;;RSTI_VARI;S;;;;;;;;;;000;;;;;|'
'TXT_VARIANTS;;TVIMV_DEL;M;;;;;;;;;;000;;;;;|'
'TXT_VARIANTS_OF_REPORTS;;;;;;;;;;;;;000;;;;;|'
'TXT_VARIANT_TRANSACTION;;EUSEL_VARI;L;;;;;;;;;;000;;;;;|'
'TXT_VERSION;;SBORPVNR;S;;;;;;;;;;000;;;;;|'
'TXT_VIEW;;VIEWNAME;S;;;;;;;;;;000;;;;;|'
'TXT_VIEWS;;EX_CDV;M;;;;;;;;;;000;;;;;|'
'TXT_VIEW_FIELD;;VIEWFIELD;M;;;;;;;;;;000;;;;;|'
'TXT_VIEW_FLDS;;;;;;;;;;;;;000;;;;;|'
'TXT_VISIBILITY;;SEOEXPOSE;M;;;;;;;;;;000;;;;;|'
'TXT_VISIBLE;;SEOEXPOSE;S;;;;;;;;;;000;;;;;|'
'TXT_VISLG;;SCRFVLENG;M;;;;;;;;;;000;;;;;|'
'TXT_W;;;;;;;;;;;;;000;;;;;|'
'TXT_WITHOUT_APPLICATION_TOOLBA;;SCRPNOTOOL;D;;;;;;;;;;000;;;;;|'
'TXT_WITHOUT_TEMPLATE;;;;;;;;;;;;;000;;;;;|'
'TXT_WITH_ICON;;SCRFICONX;M;;;;;;;;;;000;;;;;|'
'TXT_WO_SCRIPT_CODE;;O2NOSCRIPT;M;;;;;;;;;;000;;;;;|'
'TXT_YES;;;;XFELD;X;;;;;;;;000;;;;;|'
'VAR_NAME_VALUE;#NAME_VALUE#;;;;;;;;;;;;000;;;;;|'
space into ls_csv.
append ls_csv to ct_csv.
endform.  "csv_text_elements_1
form csv_text_elements_2
changing ct_csv type it_string.
refresh ct_csv.
data ls_csv type string.
concatenate
'TPT_DDIC_DOMA;D;Dictionary: Dom&#xE4;ne anzeigen|'
'TPT_DDIC_DOMA;E;Dictionary: Display Domain|'
'TPT_DDIC_DTEL;D;Dictionary: Datenelement anzeigen|'
'TPT_DDIC_DTEL;E;Dictionary: Display Data Element|'
'TPT_DDIC_ENQU;D;Dictionary: Sperrobjekt anzeigen|'
'TPT_DDIC_ENQU;E;Dictionary: Display Lock Object|'
'TPT_DDIC_SHLP;D;Dictionary: Suchhilfe anzeigen|'
'TPT_DDIC_SHLP;E;Dictionary: Display Search Help|'
'TPT_DDIC_STRU;D;Dictionary: Struktur anzeigen|'
'TPT_DDIC_STRU;E;Dictionary: Display Structure|'
'TPT_DDIC_TABL;D;Dictionary: Tabelle anzeigen|'
'TPT_DDIC_TABL;E;Dictionary: Display Table|'
'TPT_DDIC_TTYP;D;Dictionary: Tabellentyp anzeigen|'
'TPT_DDIC_TTYP;E;Dictionary: Display Table Type|'
'TPT_DDIC_TYPE;D;Dictionary: Typgruppe anzeigen|'
'TPT_DDIC_TYPE;E;Dictionary: Display Type Group|'
'TPT_DDIC_VIEW;D;Dictionary: View anzeigen|'
'TPT_DDIC_VIEW;E;Dictionary: Display View|'
'TPT_FUGR_FUBA;D;Function Builder: #NAME_VALUE# anzeigen|'
'TPT_FUGR_FUBA;E;Function Builder: Display #NAME_VALUE#|'
'TPT_FUGR_FUGR;D;Funktionsgruppe anzeigen|'
'TPT_FUGR_FUGR;E;Display Function Group|'
'TPT_FUGR_INCL;D;ABAP Editor: Include #NAME_VALUE# anzeigen|'
'TPT_FUGR_INCL;E;ABAP Editor: Display Include #NAME_VALUE#|'
'TPT_FUGR_SCR;D;Screen Painter: Dynpro zu #NAME_VALUE# anzeigen|'
'TPT_FUGR_SCR;E;Screen Painter: Display Screen for #NAME_VALUE#|'
'TPT_MSAG;D;Nachrichtenpflege: Nachrichtenklasse anzeigen|'
'TPT_MSAG;E;Message Maintenance: Display Message Class|'
'TPT_O2_WAPA;D;Web Application Builder: BSP-Applikation anzeigen|'
'TPT_O2_WAPA;E;Web Application Builder: Display BSP Application|'
'TPT_O2_WAPA_CTRL;D;Web Application Builder: Controller zu #NAME_VALU'
'E# anzeigen|'
'TPT_O2_WAPA_CTRL;E;Web Application Builder: Display Controller of #N'
'AME_VALUE#|'
'TPT_O2_WAPA_PAGE;D;Web Application Builder: Seite zu #NAME_VALUE# an'
'zeigen|'
'TPT_O2_WAPA_PAGE;E;Web Application Builder: Display Page #NAME_VALUE'
'#|'
'TPT_O2_WTAG;D;BSP-Extension #NAME_VALUE# anzeigen|'
'TPT_O2_WTAG;E;Display BSP Extension #NAME_VALUE#|'
'TPT_O2_XSLT;D;Transformation #NAME_VALUE# anzeigen|'
'TPT_O2_XSLT;E;Display XSLT Program #NAME_VALUE#|'
'TPT_PACK_DEVC;D;Package Builder: Paket anzeigen|'
'TPT_PACK_DEVC;E;Package Builder: Display Package|'
'TPT_PARA;D;Parameter anzeigen|'
'TPT_PARA;E;Display Parameter|'
'TPT_PROG_INCL;D;ABAP Editor: Include #NAME_VALUE# anzeigen|'
'TPT_PROG_INCL;E;ABAP Editor: Display Include #NAME_VALUE#|'
'TPT_PROG_REPO;D;ABAP Editor: Report #NAME_VALUE# anzeigen|'
'TPT_PROG_REPO;E;ABAP Editor: Display Report #NAME_VALUE#|'
'TPT_SEO_CLAS;D;Class Builder: Klasse #NAME_VALUE# anzeigen|'
'TPT_SEO_CLAS;E;Class Builder: Display Class #NAME_VALUE#|'
'TPT_SEO_INTF;D;Class Builder: Interface #NAME_VALUE# anzeigen|'
'TPT_SEO_INTF;E;Class Builder: Display Interface #NAME_VALUE#|'
'TPT_TOBJ;D;Berechtigungsobjekt anzeigen|'
'TPT_TOBJ;E;Display Authorization Object|'
'TXTT_BSP_EXTENSION_NAME_VALUE;D;BSP-Extension #NAME_VALUE#|'
'TXTT_BSP_EXTENSION_NAME_VALUE;E;BSP Extension #NAME_VALUE#|'
'TXTT_CLASS_NAME_VALUE;D;Klasse #NAME_VALUE#|'
'TXTT_CLASS_NAME_VALUE;E;Class #NAME_VALUE#|'
'TXTT_CONTEXT_MENU_FORM_ON_CTME;D;Kontextmen&#xFC; FORM ON CTMENU|'
'TXTT_CONTEXT_MENU_FORM_ON_CTME;E;Context menu FORM ON CTMENU|'
'TXTT_CONTROLLER_OF_NAME_VALUE;D;Controller zu #NAME_VALUE#|'
'TXTT_CONTROLLER_OF_NAME_VALUE;E;Controller of #NAME_VALUE#|'
'TXTT_CURRENCY_QUANTITY_FIELD;D;W&#xE4;hrung/Mengenfeld|'
'TXTT_CURRENCY_QUANTITY_FIELD;E;Currency/Quantity field|'
'TXTT_ENTRY_HELP_CHECK;D;Eingabehilfe/Pr&#xFC;fung|'
'TXTT_ENTRY_HELP_CHECK;E;Entry help/check|'
'TXTT_INCLUDE_NAME_VALUE;D;Include #NAME_VALUE#|'
'TXTT_INCLUDE_NAME_VALUE;E;Include #NAME_VALUE#|'
'TXTT_INTERFACE_NAME_VALUE;D;Interface #NAME_VALUE#|'
'TXTT_INTERFACE_NAME_VALUE;E;Interface #NAME_VALUE#|'
'TXTT_LINES_COLUMNS;D;Zeilen/Spalten|'
'TXTT_LINES_COLUMNS;E;Lines/Columns|'
'TXTT_PAGE_NAME_VALUE;D;Seite zu #NAME_VALUE#|'
'TXTT_PAGE_NAME_VALUE;E;Page #NAME_VALUE#|'
'TXTT_REPORT_NAME_VALUE;D;Report #NAME_VALUE#|'
'TXTT_REPORT_NAME_VALUE;E;Report #NAME_VALUE#|'
'TXTT_SCREEN_FOR_NAME_VALUE;D;Dynpro zu #NAME_VALUE#|'
'TXTT_SCREEN_FOR_NAME_VALUE;E;Screen for #NAME_VALUE#|'
'TXTT_TABLES_JOIN_CONDITIONS;D;Tabellen/Joinbedingungen|'
'TXTT_TABLES_JOIN_CONDITIONS;E;Table/Join Conditions|'
'TXTT_TRANSFORMATION_NAME_VALUE;D;Transformation #NAME_VALUE#|'
'TXTT_TRANSFORMATION_NAME_VALUE;E;Transformation #NAME_VALUE#|'
'TXTT_TYPE_GROUP_OBJECT_TYPE;D;Typgruppe/Objekttyp|'
'TXTT_TYPE_GROUP_OBJECT_TYPE;E;Type group/Object type|'
'TXTT_UNICODE_CHECKS_ACTIVE;D;Unicodepr&#xFC;fungen aktiv|'
'TXTT_UNICODE_CHECKS_ACTIVE;E;Unicode checks active|'
'TXT_2_DIMENSIONAL;D;2Dim|'
'TXT_2_DIMENSIONAL;E;2-dimensional|'
'TXT_ABAP_LOAD;D;ABAP-Load|'
'TXT_ABAP_LOAD;E;ABAP Load|'
'TXT_ABOUT;D;&#xFC;ber|'
'TXT_ABOUT;E;about|'
'TXT_ABSTRACT;D;Abstrakt|'
'TXT_ABSTRACT;E;Abstract|'
'TXT_ACCESS;D;Zugriff|'
'TXT_ACCESS;E;Access|'
'TXT_ACCESS_TYPE_IS_GIVEN_FOR_A;D;Zugriffsart ist f&#xFC;r einen Rang'
'es-Tabellentyp vorgegeben|'
'TXT_ACCESS_TYPE_IS_GIVEN_FOR_A;E;Access type is given for a ranges t'
'able type|'
'TXT_ACTIVATED;D;Aktiv|'
'TXT_ACTIVATED;E;Activated|'
'TXT_ACTIVE___1;D;aktiv|'
'TXT_ACTIVE___1;E;Active|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_ACTIVE___2;D;aktiv|'
'TXT_ACTIVE___2;E;active|'
'TXT_ACTIVITIES;D;Aktivit&#xE4;ten|'
'TXT_ACTIVITIES;E;Activities|'
'TXT_ACTIVITY;D;Aktivit&#xE4;t|'
'TXT_ACTIVITY;E;Activity|'
'TXT_ALIAS;D;Alias|'
'TXT_ALIAS;E;Alias|'
'TXT_ALIASES;D;Aliases|'
'TXT_ALIASES;E;Aliases|'
'TXT_ALLOWED_OBJECT_TYPES;D;Erlaubte Objekttypen|'
'TXT_ALLOWED_OBJECT_TYPES;E;Allowed object types|'
'TXT_ALLOW_RFC;D;RFC erlauben|'
'TXT_ALLOW_RFC;E;Allow RFC|'
'TXT_ALL_RIGHTS_RESERVED;D;Alle Rechte vorbehalten.|'
'TXT_ALL_RIGHTS_RESERVED;E;All rights reserved.|'
'TXT_AND_OR;D;AND/OR|'
'TXT_AND_OR;E;AND/OR|'
'TXT_APPENDING_VIEW;D;Appendierender View|'
'TXT_APPENDING_VIEW;E;Appending view|'
'TXT_APPLICATION;D;Anwendung|'
'TXT_APPLICATION;E;Application|'
'TXT_APPLICATION_CLASS;D;Anwendungsklasse|'
'TXT_APPLICATION_CLASS;E;Application Class|'
'TXT_APPLICATION_COMPONENT;D;Anwendungskomponente|'
'TXT_APPLICATION_COMPONENT;E;Application Component|'
'TXT_APPLICATION___1;E;Application|'
'TXT_ASSIGNED_ERROR_PAGE;D;Zugeord. Fehlerseite|'
'TXT_ASSIGNED_ERROR_PAGE;E;Assigned Error Page|'
'TXT_ASSOCIATED_TYPE;D;Bezugstyp|'
'TXT_ASSOCIATED_TYPE;E;Associated Type|'
'TXT_ASSOCIATED_TYPE_FOR_LOW_HI;D;Bezugstyp f&#xFC;r LOW/HIGH-Kompone'
'nten|'
'TXT_ASSOCIATED_TYPE_FOR_LOW_HI;E;Associated type for LOW/HIGH compon'
'ents|'
'TXT_AS_LABEL_LEFT;D;als Bez. links|'
'TXT_AS_LABEL_LEFT;E;As label left|'
'TXT_AS_LABEL_RIGHT;D;als Bez. rechts|'
'TXT_AS_LABEL_RIGHT;E;As label right|'
'TXT_ATTRIBUTE;D;Attribut|'
'TXT_ATTRIBUTE;E;Attribute|'
'TXT_ATTRIBUTES___1;D;Eigenschaften|'
'TXT_ATTRIBUTES___1;E;Attributes|'
'TXT_ATTRIBUTES___2;D;Attribute|'
'TXT_ATTRIBUTES___2;E;Attributes|'
'TXT_AUTHORIZATION_FIELDS;D;Berechtigungsfelder|'
'TXT_AUTHORIZATION_FIELDS;E;Authorization fields|'
'TXT_AUTHORIZATION_GROUP;D;Berechtigungsgruppe|'
'TXT_AUTHORIZATION_GROUP;E;Authorization Group|'
'TXT_AUTHORIZATION_OBJECT;E;Authorization object|'
'TXT_AUTHORIZATION_OBJECT___1;D;Berechtigungsobjekt|'
'TXT_AUTHORIZATION_OBJECT___1;E;Authorization object|'
'TXT_AUTHORIZATION_OBJECT___2;D;Berechtigungsobjekt|'
'TXT_AUTHORIZATION_OBJECT___2;E;Authorization Object|'
'TXT_AUTO;D;Auto|'
'TXT_AUTO;E;Auto|'
'TXT_AUTOR;D;Author|'
'TXT_AUTOR;E;Autor|'
'TXT_BINDABLE;D;Bindable|'
'TXT_BINDABLE;E;Bindable|'
'TXT_BLANK;D;Leer|'
'TXT_BLANK;E;Blank|'
'TXT_BRG;D;Hell|'
'TXT_BRG;E;Brg.|'
'TXT_BROWSER_CACHE;D;Browser Cache|'
'TXT_BROWSER_CACHE;E;Browser Cache|'
'TXT_BROWSER_SPECIFIC;D;Browser abh&#xE4;ngig|'
'TXT_BROWSER_SPECIFIC;E;Browser-Specific|'
'TXT_BSP_APPLICATION;D;BSP-Applikation|'
'TXT_BSP_APPLICATION;E;BSP Application|'
'TXT_BSP_APPLICATIONS;D;BSP-Applikationen|'
'TXT_BSP_APPLICATIONS;E;BSP Applications|'
'TXT_BSP_ELEMENT;D;BSP-Element|'
'TXT_BSP_ELEMENT;E;BSP Element|'
'TXT_BSP_ELEMENTS_AND_STATIC_HT;D;BSP-Elemente und statisches HTML|'
'TXT_BSP_ELEMENTS_AND_STATIC_HT;E;BSP Elements and Static HTML|'
'TXT_BSP_ELEMENTS_ONLY;D;Ausschlie&#xDF;lich BSP-Elemente|'
'TXT_BSP_ELEMENTS_ONLY;E;BSP Elements Only|'
'TXT_BSP_ELEMENT_BASIS_CLASS;D;BSP-Element Basis Klasse|'
'TXT_BSP_ELEMENT_BASIS_CLASS;E;BSP Element Basis Class|'
'TXT_BSP_EXTENSION;D;BSP-Extension|'
'TXT_BSP_EXTENSIONS;D;BSP-Extensions|'
'TXT_BSP_EXTENSIONS;E;BSP Extensions|'
'TXT_BSP_EXTENSION_CLASS;D;BSP-Extension Klasse|'
'TXT_BSP_EXTENSION_CLASS;E;BSP Extension Class|'
'TXT_BSP_LIBRARY;D;Web Objekte|'
'TXT_BSP_LIBRARY;E;BSP Library|'
'TXT_BUFFERING;D;Pufferung|'
'TXT_BUFFERING;E;Buffering|'
'TXT_BUFFERING_TYPE;D;Pufferungsart|'
'TXT_BUFFERING_TYPE;E;Buffering type|'
'TXT_BUILT_IN_TYPE;D;Eingebauter Typ|'
'TXT_BUILT_IN_TYPE;E;Built-in type|'
'TXT_CACHING;D;Caching|'
'TXT_CACHING;E;Caching|'
'TXT_CALL_BY_REF;D;Referenz&#xFC;bergabe|'
'TXT_CALL_BY_REF;E;Call by ref.|'
'TXT_CATEGORY;D;Kategorie|'
'TXT_CATEGORY;E;Category|'
'TXT_CHANGED_ON;D;&#xC4;nderungsdatum|'
'TXT_CHANGED_ON;E;Changed on|'
'TXT_CHANGES_ARE_RECORDED;D;Mit &#xC4;nderungsaufzeichnung|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_CHANGES_ARE_RECORDED;E;Changes are recorded|'
'TXT_CHANGE_DOCUMENT;D;&#xC4;nderungsbeleg|'
'TXT_CHANGE_DOCUMENT;E;Change document|'
'TXT_CHANGING;D;Changing|'
'TXT_CHANGING;E;Changing|'
'TXT_CHECK;D;Pr&#xFC;fung|'
'TXT_CHECK;E;Check|'
'TXT_CHECK_TABLE;D;Pr&#xFC;ftabelle|'
'TXT_CHECK_TABLE;E;Check table|'
'TXT_CLASS;D;Klasse|'
'TXT_CLASS;E;Class|'
'TXT_CLASSES;D;Klassen|'
'TXT_CLASSES;E;Classes|'
'TXT_CLASSIFICATION;D;Klassifikation|'
'TXT_CLASSIFICATION;E;Classification|'
'TXT_CLASS_DOCUMENTATION;D;Klassen-Dokumentation|'
'TXT_CLASS_DOCUMENTATION;E;Class documentation|'
'TXT_CLASS_LIBRARY;D;Klassenbibliothek|'
'TXT_CLASS_LIBRARY;E;Class Library|'
'TXT_CLASS_NAME;D;Klassenname|'
'TXT_CLASS_NAME;E;Class Name|'
'TXT_CLIENT;D;Mandant|'
'TXT_CLIENT;E;Client|'
'TXT_CLUSTER_TABLE;D;Cluster-Tabelle|'
'TXT_CLUSTER_TABLE;E;Cluster Table|'
'TXT_COLL_RUN;D;Sammellauf|'
'TXT_COLL_RUN;E;Coll.run|'
'TXT_COLUMN;D;Spalte|'
'TXT_COLUMN;E;Column|'
'TXT_COLUMNS;D;Spalten|'
'TXT_COLUMNS;E;Columns|'
'TXT_COLUMN_HEADING;D;Spalten&#xFC;berschrift|'
'TXT_COLUMN_HEADING;E;Column heading|'
'TXT_COMPARE_FLAG;D;Abgleichkennzeichen|'
'TXT_COMPARE_FLAG;E;Compare Flag|'
'TXT_COMPARISON_VALUE;D;Vergleichswert|'
'TXT_COMPARISON_VALUE;E;Comparison Value|'
'TXT_COMPILATION;D;Compilation|'
'TXT_COMPILATION;E;Compilation|'
'TXT_COMPLETE;D;vollst&#xE4;ndig|'
'TXT_COMPLETE;E;Complete|'
'TXT_COMPLETED;D;Fertig|'
'TXT_COMPLETED;E;Completed|'
'TXT_COMPONENT;D;Komponente|'
'TXT_COMPONENT;E;Component|'
'TXT_COMPONENTS;D;Komponenten|'
'TXT_COMPONENTS;E;Components|'
'TXT_COMPONENT_INFORMATION;D;Komponenteninformationen|'
'TXT_COMPONENT_INFORMATION;E;Component information|'
'TXT_COMPONENT_TYPE;D;Komponententyp|'
'TXT_COMPONENT_TYPE;E;Component type|'
'TXT_COMPONENT_VERSION;D;Komponentenversion|'
'TXT_COMPONENT_VERSION;E;Component version|'
'TXT_COMPRESSED;D;komprimiert|'
'TXT_COMPRESSED;E;compressed|'
'TXT_COMPRESSION;D;Seitenkompr.|'
'TXT_COMPRESSION;E;Compression|'
'TXT_CONTEXT_MENU;D;Kontextmen&#xFC;|'
'TXT_CONTEXT_MENU;E;Context menu|'
'TXT_CONTROLLER;D;Controller|'
'TXT_CONTROLLER;E;Controller|'
'TXT_CONTROLLER_CLASS;D;Controller-Klasse|'
'TXT_CONTROLLER_CLASS;E;Controller Class|'
'TXT_CONTROL_COMPOSITE_NAME;D;Control Composite Name|'
'TXT_CONTROL_COMPOSITE_NAME;E;Control Composite name|'
'TXT_CONVERSION_EXIT;D;Konvertierungs-Exit|'
'TXT_CONVERSION_EXIT;E;Conversion exit|'
'TXT_CONVERSION_FOR_AUTHORIZATI;D;Konvertierung f&#xFC;r Berechtigung'
'sfelder erlaubt|'
'TXT_CONVERSION_FOR_AUTHORIZATI;E;Conversion for authorization fields'
' allowed|'
'TXT_CONVERS_ROUTINE;D;Konvert.-Routine|'
'TXT_CONVERS_ROUTINE;E;Convers. routine|'
'TXT_CREATED;D;Erstellt|'
'TXT_CREATED;E;Created|'
'TXT_CREATED_BY___1;D;Angelegt|'
'TXT_CREATED_BY___1;E;Created by|'
'TXT_CREATED_BY___2;D;Anleger|'
'TXT_CREATED_BY___2;E;Created by|'
'TXT_CREATED_ON;D;Erstellungsdatum|'
'TXT_CREATED_ON;E;Created on|'
'TXT_CREATE_STATEMENT;D;CREATE-Anweisung|'
'TXT_CREATE_STATEMENT;E;CREATE Statement|'
'TXT_CREATION_DATE;D;Erstellungsdatum|'
'TXT_CREATION_DATE;E;Creation Date|'
'TXT_CROSS_CLIENT;D;mandantenunabh&#xE4;ngig|'
'TXT_CROSS_CLIENT;E;Cross-client|'
'TXT_CUA_LOAD;D;CUA-Load|'
'TXT_CUA_LOAD;E;CUA load|'
'TXT_CURRENCY;D;W&#xE4;hrung|'
'TXT_CURRENCY;E;Currency|'
'TXT_CURSOR_POSITION;D;Cursorposition|'
'TXT_CURSOR_POSITION;E;Cursor position|'
'TXT_DATABASE_CONTENT;D;Datenbankinhalt|'
'TXT_DATABASE_CONTENT;E;database content|'
'TXT_DATABASE_DATA;D;Datenbankdaten|'
'TXT_DATABASE_DATA;E;Database data|'
'TXT_DATABASE_INFORMATION;D;Datenbankinformation|'
'TXT_DATABASE_INFORMATION;E;Database information|'
'TXT_DATABASE_SYSTEM;D;Datanbank-System|'
'TXT_DATABASE_SYSTEM;E;Database system|'
'TXT_DATABASE_TABLES;D;Datenbanktabellen|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_DATABASE_TABLES;E;Database Tables|'
'TXT_DATA_BROWSER_TABLE_VIEW_MA;D;Data Browser/Tabellensicht-Pflege|'
'TXT_DATA_BROWSER_TABLE_VIEW_MA;E;Data Browser/Table View Maint.|'
'TXT_DATA_CLASS;D;Datenart|'
'TXT_DATA_CLASS;E;Data class|'
'TXT_DATA_COLLECTION;D;Datenbeschaffung|'
'TXT_DATA_COLLECTION;E;Data collection|'
'TXT_DATA_ELEM;D;Datenelem|'
'TXT_DATA_ELEM;E;Data elem.|'
'TXT_DATA_ELEMENTS;D;Datenelemente|'
'TXT_DATA_ELEMENTS;E;Data Elements|'
'TXT_DATA_ELEMENT___1;D;Datenelement|'
'TXT_DATA_ELEMENT___1;E;Data element|'
'TXT_DATA_ELEMENT___2;D;Datenelement|'
'TXT_DATA_ELEMENT___2;E;Data Element|'
'TXT_DATA_TYPE;D;Datentyp|'
'TXT_DATA_TYPE;E;Data Type|'
'TXT_DBSL_PATCH_LEVEL;D;DBSL Patch Level|'
'TXT_DBSL_PATCH_LEVEL;E;DBSL Patch Level|'
'TXT_DBSL_VERSION;D;DBSL Version|'
'TXT_DBSL_VERSION;E;DBSL version|'
'TXT_DB_CLIENT_LIB;D;DB Client Lib|'
'TXT_DB_CLIENT_LIB;E;DB client lib.|'
'TXT_DB_RELEASES;D;DB Releases|'
'TXT_DB_RELEASES;E;DB releases|'
'TXT_DECIMAL_PLACES___M;D;Dezimalstellen|'
'TXT_DECIMAL_PLACES___M;E;Decimal Places|'
'TXT_DECIMAL_PLACES___T;D;DezStellen|'
'TXT_DECIMAL_PLACES___T;E;Decimal Places|'
'TXT_DEFAULTS;D;Festwerte|'
'TXT_DEFAULTS;E;Defaults|'
'TXT_DEFAULT_COMPONENT_NAME;D;Default-Komponentenname|'
'TXT_DEFAULT_COMPONENT_NAME;E;Default component name|'
'TXT_DEFAULT_PREFIX;D;Default-Pr&#xE4;fix|'
'TXT_DEFAULT_PREFIX;E;Default Prefix|'
'TXT_DEFAULT_VALUES;D;Vorschlagswerte|'
'TXT_DEFAULT_VALUES;E;Default Values|'
'TXT_DEFAULT_VALUES_FOR;D;Vorschlagswerte f&#xFC;r|'
'TXT_DEFAULT_VALUES_FOR;E;Default values for|'
'TXT_DEFAULT_VALUE___1;D;Defaultwert|'
'TXT_DEFAULT_VALUE___1;E;Default value|'
'TXT_DEFAULT_VALUE___2;D;Vorschlagswert|'
'TXT_DEFAULT_VALUE___2;E;Default value|'
'TXT_DEFINITION;D;Definition|'
'TXT_DEFINITION;E;Definition|'
'TXT_DEFLG;D;defLg|'
'TXT_DEFLG;E;DefLg|'
'TXT_DELIVERY_AND_MAINTENANCE;D;Auslieferung und Pflege|'
'TXT_DELIVERY_AND_MAINTENANCE;E;Delivery and Maintenance|'
'TXT_DELIVERY_CLASS;D;Auslieferungsklasse|'
'TXT_DELIVERY_CLASS;E;Delivery Class|'
'TXT_DELTA_HANDLING;D;Delta-Handling|'
'TXT_DELTA_HANDLING;E;Delta Handling|'
'TXT_DESCRIPTION;D;Beschreibung|'
'TXT_DESCRIPTION;E;Description|'
'TXT_DESELECT_ALL;D;Alle entmarkieren|'
'TXT_DESELECT_ALL;E;Deselect All|'
'TXT_DFLT_VALUE;D;Defaultwert|'
'TXT_DFLT_VALUE;E;Dflt value|'
'TXT_DIALOG_BEHAVIOR;D;Dialogverhalten|'
'TXT_DIALOG_BEHAVIOR;E;Dialog behavior|'
'TXT_DIALOG_DATA_TRANSPORT_DETA;D;Angaben zum Datentransport des Dial'
'ogs|'
'TXT_DIALOG_DATA_TRANSPORT_DETA;E;Dialog Data Transport Details|'
'TXT_DIALOG_TRANSACTION;D;Dialogtransaktion|'
'TXT_DIALOG_TRANSACTION;E;Dialog transaction|'
'TXT_DIALOG_TYPE;D;Dialogtyp|'
'TXT_DIALOG_TYPE;E;Dialog type|'
'TXT_DICTIONARY_REFERENCE;D;Dictionary-Referenz|'
'TXT_DICTIONARY_REFERENCE;E;Dictionary reference|'
'TXT_DICT_FIELD;D;Dict-F|'
'TXT_DICT_FIELD;E;Dict.field|'
'TXT_DICT_MODIFIED;D;Dict-Mod|'
'TXT_DICT_MODIFIED;E;Dict.modified|'
'TXT_DICT_OBJS;D;DDIC-Objekte|'
'TXT_DICT_OBJS;E;Dict. objs.|'
'TXT_DIRECTORY;D;Verzeichnis|'
'TXT_DIRECTORY;E;Directory|'
'TXT_DISABLED;D;Disabled|'
'TXT_DISABLED;E;Disabled|'
'TXT_DISPLAY;D;Anzeigen|'
'TXT_DISPLAY;E;Display|'
'TXT_DISPLAY_ATTR;D;Anzeigeattrib.|'
'TXT_DISPLAY_ATTR;E;Display attr.|'
'TXT_DLEN;D;DLen|'
'TXT_DLEN;E;DLen|'
'TXT_DOCUMENTATION;D;Dokumentation|'
'TXT_DOCUMENTATION;E;Documentation|'
'TXT_DOMAIN;D;Dom&#xE4;ne|'
'TXT_DOMAIN;E;Domain|'
'TXT_DOMAINS;D;Dom&#xE4;nen|'
'TXT_DOMAINS;E;Domains|'
'TXT_DROPDOWN;D;Dropdown|'
'TXT_DROPDOWN;E;Dropdown|'
'TXT_DTYP;D;DTyp|'
'TXT_DTYP;E;DTyp|'
'TXT_DYNAMIC_CONTEXT_MENU;D;dynam. Kontextmen&#xFC;|'
'TXT_DYNAMIC_CONTEXT_MENU;E;Dynamic context menu|'
'TXT_DYNAMIC_VALUE_ALLOWED;D;Dynamischer Wert erlaubt|'
'TXT_DYNAMIC_VALUE_ALLOWED;E;Dynamic Value Allowed|'
'TXT_EASY_WEB_TRANSACTION;D;Easy Web Transaction|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_EASY_WEB_TRANSACTION;E;Easy Web Transaction|'
'TXT_EDITOR_LOCK;D;Editorsperre|'
'TXT_EDITOR_LOCK;E;Editor lock|'
'TXT_EDIT_LOCK;D;Editiersperre|'
'TXT_EDIT_LOCK;E;Edit lock|'
'TXT_ELEMENTARY_SRCH_HLP;D;elementare Suchhilfe|'
'TXT_ELEMENTARY_SRCH_HLP;E;Elementary srch hlp|'
'TXT_ELEMENTARY_TYPE;D;Elementarer Typ|'
'TXT_ELEMENTARY_TYPE;E;Elementary type|'
'TXT_ELEMENT_CONTENT;D;Element-Inhalt|'
'TXT_ELEMENT_CONTENT;E;Element: content|'
'TXT_ELEMENT_HANDLER_CLASS;D;Element-Handler-Klasse|'
'TXT_ELEMENT_HANDLER_CLASS;E;Element Handler Class|'
'TXT_ELEMENT_INTERPRETS_CONTENT;D;Element interpretiert Inhalt selbst|'
'TXT_ELEMENT_INTERPRETS_CONTENT;E;Element Interprets Content Itself|'
'TXT_ELEMENT_LIST;D;Elementliste|'
'TXT_ELEMENT_LIST;E;Element list|'
'TXT_EMPTY_TAB;D;Leere Tabreiter|'
'TXT_EMPTY_TAB;E;Empty Tab|'
'TXT_ENHANCEMENT_CATEGORY;D;Erweiterungskategorie...|'
'TXT_ENHANCEMENT_CATEGORY;E;Enhancement Category...|'
'TXT_ENHANCEMENT_CATEGORY_FOR_S;D;Erweiterungskategorie der Struktur|'
'TXT_ENHANCEMENT_CATEGORY_FOR_S;E;Enhancement Category for Structure|'
'TXT_ENTER_A_PACKAGE;D;Bitte geben Sie ein Paket ein|'
'TXT_ENTER_A_PACKAGE;E;Enter a package|'
'TXT_ENTRY;D;*-Eingabe|'
'TXT_ENTRY;E;* Entry|'
'TXT_ENTRY_HELP;D;Eingabehilfe|'
'TXT_ENTRY_HELP;E;Entry help|'
'TXT_EQ;D;=|'
'TXT_EQ;E;=|'
'TXT_ERROR_HANDLING;D;Fehlerbehandlung|'
'TXT_ERROR_HANDLING;E;Error Handling|'
'TXT_ERROR_SEVERITY;D;Fehlerschwere|'
'TXT_ERROR_SEVERITY;E;Error Severity|'
'TXT_EVENT;D;Ereignis|'
'TXT_EVENT;E;Event|'
'TXT_EVENTS;D;Ereignisse|'
'TXT_EVENTS;E;Events|'
'TXT_EVENT_HANDLER;D;Eventhandler|'
'TXT_EVENT_HANDLER;E;Event Handler|'
'TXT_EXCEPTIONS;D;Ausnahmen|'
'TXT_EXCEPTIONS;E;Exceptions|'
'TXT_EXCEPTION___1;D;Exception|'
'TXT_EXCEPTION___1;E;Exception|'
'TXT_EXCEPTION___2;D;Ausnahme|'
'TXT_EXCEPTION___2;E;Exception|'
'TXT_EXCLUSIVE;D;Exclusive|'
'TXT_EXCLUSIVE;E;Exclusive|'
'TXT_EXP;D;EXP|'
'TXT_EXP;E;EXP|'
'TXT_EXPORT;D;Export|'
'TXT_EXPORT;E;Export|'
'TXT_FIELD;D;Feld|'
'TXT_FIELD;E;Field|'
'TXT_FIELDS;D;Felder|'
'TXT_FIELDS;E;Fields|'
'TXT_FIELD_LABEL;D;Feldbezeichner|'
'TXT_FIELD_LABEL;E;Field label|'
'TXT_FIELD_NAME;D;Feldname|'
'TXT_FIELD_NAME;E;Field name|'
'TXT_FINAL;D;Final|'
'TXT_FINAL;E;Final|'
'TXT_FIRST_PAGE;D;Startseite|'
'TXT_FIRST_PAGE;E;First Page|'
'TXT_FIXED_FONT;D;&#xC4;quidistanz|'
'TXT_FIXED_FONT;E;Fixed font|'
'TXT_FIXED_POINT_ARITHMETIC;D;Festpunktarithmetik|'
'TXT_FIXED_POINT_ARITHMETIC;E;Fixed point arithmetic|'
'TXT_FIX_VAL;D;Festwert|'
'TXT_FIX_VAL;E;Fix.val.|'
'TXT_FLOW_LOGIC;D;Ablauflogik|'
'TXT_FLOW_LOGIC;E;Flow logic|'
'TXT_FOREIGN_KEY;D;Fremdschl&#xFC;ssel|'
'TXT_FOREIGN_KEY;E;Foreign Key|'
'TXT_FOREIGN_SOURCE_SYSTEM;D;fremdes Quellsystem|'
'TXT_FOREIGN_SOURCE_SYSTEM;E;foreign source system|'
'TXT_FORMAT;D;Format|'
'TXT_FORMAT;E;Format|'
'TXT_FORMATTING;D;Format|'
'TXT_FORMATTING;E;Formatting|'
'TXT_FORWARD_DECLARATIONS;D;Vorw&#xE4;rtsdeklarationen|'
'TXT_FORWARD_DECLARATIONS;E;Forward declarations|'
'TXT_FRAMESET;D;Frameset|'
'TXT_FRAMESET;E;Frameset|'
'TXT_FRIENDS;D;Friends|'
'TXT_FRIENDS;E;Friends|'
'TXT_FROM_MODULE_POOL;D;aus Modulpool|'
'TXT_FROM_MODULE_POOL;E;From module pool|'
'TXT_FULLY_BUFFERED;D;vollst&#xE4;ndig gepuffert|'
'TXT_FULLY_BUFFERED;E;Fully buffered|'
'TXT_FUNCTIONAL_TYPE;D;Funktionstyp|'
'TXT_FUNCTIONAL_TYPE;E;Functional type|'
'TXT_FUNCTION_CODE;D;Funktionscode|'
'TXT_FUNCTION_CODE;E;Function code|'
'TXT_FUNCTION_GROUP;D;Funktionsgruppe|'
'TXT_FUNCTION_GROUP;E;Function group|'
'TXT_FUNCTION_GROUPS;D;Funktionsgruppen|'
'TXT_FUNCTION_GROUPS;E;Function Groups|'
'TXT_FUNCTION_GROUP_DOC;D;FGruppendoku|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_FUNCTION_GROUP_DOC;E;Function group doc.|'
'TXT_FUNCTION_MODULE;D;Funktionsbaustein|'
'TXT_FUNCTION_MODULE;E;Function module|'
'TXT_FUNCTION_MODULES;D;Funktionsbausteine|'
'TXT_FUNCTION_MODULES;E;Function Modules|'
'TXT_FUNCTION_MODULE_DOCUMENTAT;D;Fbausteindokumentation|'
'TXT_FUNCTION_MODULE_DOCUMENTAT;E;Function module documentation|'
'TXT_FURTHER_CHARACTERISTICS;D;Zusatzeigenschaften|'
'TXT_FURTHER_CHARACTERISTICS;E;Further Characteristics|'
'TXT_FURTHER_OPTIONS;D;Weitere Optionen|'
'TXT_FURTHER_OPTIONS;E;Further options|'
'TXT_GENERAL_ATTR;D;Allg. Attrib.|'
'TXT_GENERAL_ATTR;E;General attr.|'
'TXT_GENERAL_DATA;D;Allgemeine Daten|'
'TXT_GENERAL_DATA;E;General Data|'
'TXT_GENERIC_AREA_BUFFERED;D;generischer Bereich gepuffert|'
'TXT_GENERIC_AREA_BUFFERED;E;Generic area buffered|'
'TXT_GET_PARAMETER;D;Get Parameter|'
'TXT_GET_PARAMETER;E;GET parameter|'
'TXT_GLOBAL;D;Global|'
'TXT_GLOBAL;E;Global|'
'TXT_GROUP;D;Gruppe|'
'TXT_GROUP;E;Group|'
'TXT_GROUP_1;D;Gruppe1|'
'TXT_GROUP_1;E;Group 1|'
'TXT_GROUP_2;D;Gruppe2|'
'TXT_GROUP_2;E;Group 2|'
'TXT_GROUP_3;D;Gruppe3|'
'TXT_GROUP_3;E;Group 3|'
'TXT_GROUP_4;D;Gruppe4|'
'TXT_GROUP_4;E;Group 4|'
'TXT_GUI_STATUS;D;Oberfl&#xE4;chenstatus|'
'TXT_GUI_STATUS;E;GUI status|'
'TXT_GUI_SUPPORT;D;GUI-F&#xE4;higkeit|'
'TXT_GUI_SUPPORT;E;GUI support|'
'TXT_HEADING;D;&#xDC;berschrift|'
'TXT_HEADING;E;Heading|'
'TXT_HEIGHT;D;H&#xF6;he|'
'TXT_HEIGHT;E;Height|'
'TXT_HELP;D;Hilfe|'
'TXT_HELP;E;Help|'
'TXT_HIDDEN;D;Versteckt|'
'TXT_HIDDEN;E;Hidden|'
'TXT_HIERARCHY;D;Hierarchie|'
'TXT_HIERARCHY;E;Hierarchy|'
'TXT_HIGHEST_SUPPORT_PACKAGE;D;H&#xF6;chstes Support Package|'
'TXT_HIGHEST_SUPPORT_PACKAGE;E;Highest Support Package|'
'TXT_HOLD_DATA;D;Halten Daten|'
'TXT_HOLD_DATA;E;Hold Data|'
'TXT_HOLD_SCROLL_POSITION;D;Scrollposition halten|'
'TXT_HOLD_SCROLL_POSITION;E;Hold Scroll Position|'
'TXT_HOST;D;Host|'
'TXT_HOST;E;Host|'
'TXT_HOST_DATA;D;Rechnerdaten|'
'TXT_HOST_DATA;E;Host data|'
'TXT_HOT_KEY;D;Kurzanwahl|'
'TXT_HOT_KEY;E;Hot key|'
'TXT_HTTPS;D;HTTPS|'
'TXT_HTTPS;E;HTTPS|'
'TXT_ICON;D;Ikone|'
'TXT_ICON;E;Icon|'
'TXT_ICON_NAME;D;Ikonenname|'
'TXT_ICON_NAME;E;Icon name|'
'TXT_ICON_TEXT;D;Ikonentext|'
'TXT_ICON_TEXT;E;Icon text|'
'TXT_IMMEDIATE_START_NO_RESTART;D;Start sofort-nicht nachverbuchbar|'
'TXT_IMMEDIATE_START_NO_RESTART;E;Immediate start, no restart|'
'TXT_IMP;D;IMP|'
'TXT_IMP;E;IMP|'
'TXT_IMPLEMENTATION;D;Impl.|'
'TXT_IMPLEMENTATION;E;Implementation|'
'TXT_IMPLEMENTED_ACTIVE;D;realisiert / aktiv|'
'TXT_IMPLEMENTED_ACTIVE;E;Implemented / Active|'
'TXT_IMPORT;D;Import|'
'TXT_IMPORT;E;Import|'
'TXT_INACTIVE;D;Inaktiv|'
'TXT_INACTIVE;E;Inactive|'
'TXT_INCLUDE;D;Include|'
'TXT_INCLUDE;E;Include|'
'TXT_INCLUDES;D;Includes|'
'TXT_INCLUDES;E;Includes|'
'TXT_INCLUDE_NAME;D;Includename|'
'TXT_INCLUDE_NAME;E;INCLUDE name|'
'TXT_INCLUSIVE;D;Inclusive|'
'TXT_INCLUSIVE;E;Inclusive|'
'TXT_INFO;D;Info|'
'TXT_INFO;E;Info.|'
'TXT_INFORMATION;D;Information|'
'TXT_INFORMATION;E;Information|'
'TXT_INHERIT_GUI_ATTRIBUTES;D;GUI-Eigenschaften erben|'
'TXT_INHERIT_GUI_ATTRIBUTES;E;Inherit GUI attributes|'
'TXT_INITIALIZATION_AND_ACCESS;D;Initialisierung und Zugriff|'
'TXT_INITIALIZATION_AND_ACCESS;E;Initialization and Access|'
'TXT_INITIAL_BSP;D;Einstiegs-BSP|'
'TXT_INITIAL_BSP;E;Initial BSP|'
'TXT_INITIAL_LINE_NUMBER;D;Initiale Zeilenanzahl|'
'TXT_INITIAL_LINE_NUMBER;E;Initial Line Number|'
'TXT_INITIAL_VALUE;D;Initialwert|'
'TXT_INITIAL_VALUE;E;Initial value|'
'TXT_INITIAL_VALUES;D;Initialwerte|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_INITIAL_VALUES;E;Initial values|'
'TXT_INPUT;D;Eingabe|'
'TXT_INPUT;E;Input|'
'TXT_INSTALLATION_NUMBER;D;Installationsnummer|'
'TXT_INSTALLATION_NUMBER;E;Installation number|'
'TXT_INSTANTIATION;D;Inst.-Erzeugung|'
'TXT_INSTANTIATION;E;Instantiation|'
'TXT_INTERFACE;D;Interface|'
'TXT_INTERFACE;E;Interface|'
'TXT_INTERFACES;D;Interfaces|'
'TXT_INTERFACES;E;Interfaces|'
'TXT_INTERFACE_COMPONENT;D;Interface-Komponente|'
'TXT_INTERFACE_COMPONENT;E;Interface Component|'
'TXT_INTERFACE_DOCUMENTATION;D;Interface-Dokumentation|'
'TXT_INTERFACE_DOCUMENTATION;E;Interface documentation|'
'TXT_INTERNALLY_RELEASED_ON;D;Intern freigegeben am|'
'TXT_INTERNALLY_RELEASED_ON;E;Internally-released on|'
'TXT_INTERNAL_NAME;D;Interner Name|'
'TXT_INTERNAL_NAME;E;Internal name|'
'TXT_INTERVALS;D;Intervalle|'
'TXT_INTERVALS;E;Intervals|'
'TXT_INVISIBLE;D;Unsichtbar|'
'TXT_INVISIBLE;E;Invisible|'
'TXT_IP_ADDRESS;D;IP-Adresse|'
'TXT_IP_ADDRESS;E;IP address|'
'TXT_IS_ERROR_PAGE;D;Ist Fehlerseite|'
'TXT_IS_ERROR_PAGE;E;Is Error Page|'
'TXT_ITERATION_OVER_ELEMENT_CON;D;Iteration &#xFC;ber Element-Inhalt|'
'TXT_ITERATION_OVER_ELEMENT_CON;E;Iteration over Element Content|'
'TXT_JOIN_CONDITIONS;D;Joinbedingungen|'
'TXT_JOIN_CONDITIONS;E;Join Conditions|'
'TXT_KERNEL_INFORMATION___1;D;Kernelinformationen|'
'TXT_KERNEL_INFORMATION___1;E;Kernel information|'
'TXT_KERNEL_INFORMATION___2;D;Kernelinformation|'
'TXT_KERNEL_INFORMATION___2;E;Kernel information|'
'TXT_KERNEL_RELEASE;D;Kernel-Release|'
'TXT_KERNEL_RELEASE;E;Kernel release|'
'TXT_KEY;D;Schl&#xFC;ssel|'
'TXT_KEY;E;Key|'
'TXT_KEY_ATTRIBUTE_DEFINED_FOR1;D;Schl&#xFC;sseleigenschaften sind f&'
'#xFC;r einen|'
'TXT_KEY_ATTRIBUTE_DEFINED_FOR1;E;Key attribute defined for a ranges '
'table type|'
'TXT_KEY_ATTRIBUTE_DEFINED_FOR2;D;Ranges-Tabellentyp vorgegeben|'
'TXT_KEY_CATEGORY;D;Schl&#xFC;sselart|'
'TXT_KEY_CATEGORY;E;Key category|'
'TXT_KEY_COMPONENTS;D;Schl&#xFC;sselkomponenten|'
'TXT_KEY_COMPONENTS;E;Key components|'
'TXT_KEY_DEFINITION;D;Schl&#xFC;sseldefinition|'
'TXT_KEY_DEFINITION;E;Key definition|'
'TXT_KEY___KEY;D;Key|'
'TXT_KEY___KEY;E;Key|'
'TXT_LANGUAGE;D;Sprache|'
'TXT_LANGUAGE;E;Language|'
'TXT_LAST_CHANGED;D;letzte &#xC4;nderung|'
'TXT_LAST_CHANGED;E;Last Changed|'
'TXT_LAST_CHANGED_AT;D;&#xC4;nderungszeit|'
'TXT_LAST_CHANGED_AT;E;Last changed at|'
'TXT_LAST_CHANGED_BY___1;D;Letzte &#xC4;nderung|'
'TXT_LAST_CHANGED_BY___1;E;Last changed by|'
'TXT_LAST_CHANGED_BY___2;D;letzter &#xC4;nderer|'
'TXT_LAST_CHANGED_BY___2;E;Last changed by|'
'TXT_LAST_CHANGED_BY___3;D;Letzter &#xC4;nderer|'
'TXT_LAST_CHANGED_BY___3;E;Last changed by|'
'TXT_LAST_CHANGED_ON;D;letzte &#xC4;nderung|'
'TXT_LAST_CHANGED_ON;E;Last Changed on|'
'TXT_LAST_CHANGED_ON_BY;D;Letzte &#xC4;nderung|'
'TXT_LAST_CHANGED_ON_BY;E;Last changed on/by|'
'TXT_LAST_GENERATION;D;Letzte Generierung|'
'TXT_LAST_GENERATION;E;Last generation|'
'TXT_LAYOUT;D;Layout|'
'TXT_LAYOUT;E;Layout|'
'TXT_LEADING_ZEROS;D;F&#xFC;hrende Nullen|'
'TXT_LEADING_ZEROS;E;Leading zeros|'
'TXT_LENGTH;D;L&#xE4;nge|'
'TXT_LENGTH;E;Length|'
'TXT_LEVEL;D;Art|'
'TXT_LEVEL;E;Level|'
'TXT_LICENSE_EXPIRATION;D;Lizenzablaufdatum|'
'TXT_LICENSE_EXPIRATION;E;License expiration|'
'TXT_LIFETIME;D;Lebensdauer|'
'TXT_LIFETIME;E;Lifetime|'
'TXT_LINE;D;Zeile|'
'TXT_LINE;E;Line|'
'TXT_LINES;D;Zeilen|'
'TXT_LINES;E;Lines|'
'TXT_LINE_TYPE;D;Zeilentyp|'
'TXT_LINE_TYPE;E;Line Type|'
'TXT_LIST_HEADER;D;Listen&#xFC;berschrift|'
'TXT_LIST_HEADER;E;List header|'
'TXT_LIST_HEADINGS;D;Listen&#xFC;berschriften|'
'TXT_LIST_HEADINGS;E;List Headings|'
'TXT_LOCAL_IN_PROGRAM;D;lokal in Programm|'
'TXT_LOCAL_IN_PROGRAM;E;Local in program|'
'TXT_LOCAL_TYPES;D;Lokale Typen|'
'TXT_LOCAL_TYPES;E;Local types|'
'TXT_LOCK_MODE;D;Sperrmodus|'
'TXT_LOCK_MODE;E;Lock mode|'
'TXT_LOCK_OBJECTS;D;Sperrobjekte|'
'TXT_LOCK_OBJECTS;E;Lock Objects|'
'TXT_LOCK_OBJECT___1;D;Sperrobjekt|'
'TXT_LOCK_OBJECT___1;E;Lock object|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_LOCK_OBJECT___2;D;Sperrobjekt|'
'TXT_LOCK_OBJECT___2;E;Lock Object|'
'TXT_LOCK_PARAMETER;D;Sperrparameter|'
'TXT_LOCK_PARAMETER;E;Lock parameter|'
'TXT_LOGICAL_DATABASE;D;Logische Datenbank|'
'TXT_LOGICAL_DATABASE;E;Logical database|'
'TXT_LOGICAL_STORAGE_PARAMETERS;D;Logische Speicher-Parameter|'
'TXT_LOGICAL_STORAGE_PARAMETERS;E;Logical storage parameters|'
'TXT_LOGON;D;Anmeldung|'
'TXT_LOGON;E;Logon|'
'TXT_LOG_DATA_CHANGES;D;Daten&#xE4;nderungen protokollieren|'
'TXT_LOG_DATA_CHANGES;E;Log data changes|'
'TXT_LONG;D;lang|'
'TXT_LONG;E;Long|'
'TXT_LONG_TEXT;D;Langtext|'
'TXT_LONG_TEXT;E;Long text|'
'TXT_LOWERCASE;D;Kleinbuchstaben|'
'TXT_LOWERCASE;E;Lowercase|'
'TXT_LOWER_LIMIT;D;Untergrenze|'
'TXT_LOWER_LIMIT;E;Lower limit|'
'TXT_LPOS;D;LPos|'
'TXT_LPOS;E;LPos|'
'TXT_MACHINE_TYPE;D;Maschinen-Typ|'
'TXT_MACHINE_TYPE;E;Machine type|'
'TXT_MACROS;D;Makros|'
'TXT_MACROS;E;Macros|'
'TXT_MAINTENANCE;D;Pflege|'
'TXT_MAINTENANCE;E;Maintenance|'
'TXT_MAINTENANCE_OF_STANDARD_TR;D;Pflege der Standardtransaktionsvari'
'ante erlaubt|'
'TXT_MAINTENANCE_OF_STANDARD_TR;E;Maintenance of standard transaction'
' variant allowed|'
'TXT_MAINTENANCE_SCREENS;D;Pflegebilder|'
'TXT_MAINTENANCE_SCREENS;E;Maintenance Screens|'
'TXT_MAINTENANCE_TYPE;D;Pflegetyp|'
'TXT_MAINTENANCE_TYPE;E;Maintenance type|'
'TXT_MAINT_SCREEN_NO;D;Pflegebildnummer|'
'TXT_MAINT_SCREEN_NO;E;Maint. Screen No.|'
'TXT_MAINT_STATUS;D;Pflegestatus|'
'TXT_MAINT_STATUS;E;Maint. status|'
'TXT_MAIN_PACKAGE;D;Hauptpaket|'
'TXT_MAIN_PACKAGE;E;Main Package|'
'TXT_MAIN_PROGRAM;D;Rahmenprogramm|'
'TXT_MAIN_PROGRAM;E;Main program|'
'TXT_MANIPULATION_OF_ELEMENT_CO;D;Manipulation des Element-Inhalts|'
'TXT_MANIPULATION_OF_ELEMENT_CO;E;Manipulation of Element Content|'
'TXT_MAX_NO_OF_LINES;D;max. Zeilenanzahl|'
'TXT_MAX_NO_OF_LINES;E;max. no. of lines|'
'TXT_MEDIUM;D;mittel|'
'TXT_MEDIUM;E;Medium|'
'TXT_MENU;D;Men&#xFC;|'
'TXT_MENU;E;Menu|'
'TXT_MESSAGE;D;Nachricht|'
'TXT_MESSAGES;D;Nachrichten|'
'TXT_MESSAGES;E;Messages|'
'TXT_MESSAGE_CLASS;D;Nachrichtenklasse|'
'TXT_MESSAGE_CLASS;E;Message Class|'
'TXT_MESSAGE_CLASSES;D;Nachrichtenklassen|'
'TXT_MESSAGE_CLASSES;E;Message Classes|'
'TXT_MESSAGE_SHORT_TEXT;D;Nachrichtenkurztext|'
'TXT_MESSAGE_SHORT_TEXT;E;Message short text|'
'TXT_METHOD;D;Methode|'
'TXT_METHOD;E;Method|'
'TXT_METHODS;D;Methoden|'
'TXT_METHODS;E;Methods|'
'TXT_METHOD_TYPE;D;Methodentyp|'
'TXT_METHOD_TYPE;E;Method type|'
'TXT_MIMES;D;Mimes|'
'TXT_MIMES;E;MIMEs|'
'TXT_MIME_TYPE;D;Mime-Typ|'
'TXT_MIME_TYPE;E;Mime Type|'
'TXT_MOD;D;Mod|'
'TXT_MOD;E;Mod|'
'TXT_MODAL_DIALOG_BOX;D;Modales Fenster|'
'TXT_MODAL_DIALOG_BOX;E;Modal dialog box|'
'TXT_MODE;D;Mode|'
'TXT_MODE;E;Mode|'
'TXT_MODELED_ONLY;D;Nur modelliert|'
'TXT_MODELED_ONLY;E;Modeled only|'
'TXT_MODIFIED;D;Modifiziert|'
'TXT_MODIFIED;E;Modified|'
'TXT_MOD_GROUPS_FUNCTIONS;D;ModifGruppen/Funktionen|'
'TXT_MOD_GROUPS_FUNCTIONS;E;Mod. Groups / functions|'
'TXT_NAME;D;Name|'
'TXT_NAME;E;Name|'
'TXT_NAME_OF_REF_TYPE;D;Referierter Typ|'
'TXT_NAME_OF_REF_TYPE;E;Name of Ref. Type|'
'TXT_NAME_OF_SCREEN_FIELD;D;Name des Dynprofeldes|'
'TXT_NAME_OF_SCREEN_FIELD;E;Name of screen field|'
'TXT_NAVIGATION;D;Navigation|'
'TXT_NAVIGATION;E;Navigation|'
'TXT_NAVIGATION_REQUEST;D;Navigationsrequest|'
'TXT_NAVIGATION_REQUEST;E;Navigation Request|'
'TXT_NEXT_SCREEN;D;Folgedynpro|'
'TXT_NEXT_SCREEN;E;Next Screen|'
'TXT_NO;D;nein|'
'TXT_NO;E;No|'
'TXT_NORMAL;D;Normal|'
'TXT_NORMAL;E;Normal|'
'TXT_NORMAL_FUNCTION_MODULE;D;Normaler Funktionsbaustein|'
'TXT_NORMAL_FUNCTION_MODULE;E;Normal function module|'
'TXT_NOT_RELEASED;D;Nicht freigegeben|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_NOT_RELEASED;E;Not released|'
'TXT_NO_LENGTH_RESTRICTION;D;L&#xE4;nge ist unbeschr&#xE4;nkt|'
'TXT_NO_LENGTH_RESTRICTION;E;No length restriction|'
'TXT_NO_OF_CHARACTERS;D;Zahl der Stellen|'
'TXT_NO_OF_CHARACTERS;E;No. of Characters|'
'TXT_NO_OF_KEY_FIELDS;D;Anzahl Schl&#xFC;sselfelder|'
'TXT_NO_OF_KEY_FIELDS;E;No. of key fields|'
'TXT_NO_OR_USER_RECORDING_ROUTI;D;keine oder individuelle Aufzeichnun'
'gsroutine|'
'TXT_NO_OR_USER_RECORDING_ROUTI;E;no, or user, recording routine|'
'TXT_NO_RESET;D;Keine R&#xFC;cknahme|'
'TXT_NO_RESET;E;No reset|'
'TXT_OBJECT;D;Objekt|'
'TXT_OBJECT;E;Object|'
'TXT_OBJECTS;D;Objekte|'
'TXT_OBJECT_TRANSACTION;D;OO-Transaktion|'
'TXT_OBJECT_TRANSACTION;E;Object transaction|'
'TXT_OBJECT_TYPE;D;Objekttyp|'
'TXT_OBJECT_TYPE;E;Object type|'
'TXT_OCCUPIED;D;Belegt|'
'TXT_OCCUPIED;E;Occupied|'
'TXT_ONE_STEP;D;einstufig|'
'TXT_ONE_STEP;E;one step|'
'TXT_OO_TRANSACTION_MODEL;D;OO-Transaktionsmodell|'
'TXT_OO_TRANSACTION_MODEL;E;OO transaction model|'
'TXT_OPERATING_SYSTEM;D;Betriebssystem|'
'TXT_OPERATING_SYSTEM;E;Operating system|'
'TXT_OPERATOR;D;Operator|'
'TXT_OPERATOR;E;Operator|'
'TXT_OPTION;D;Option|'
'TXT_OPTION;E;Option|'
'TXT_OPTIONAL;D;Optional|'
'TXT_OPTIONAL;E;Optional|'
'TXT_OPTIONS;D;Optionen|'
'TXT_OPTIONS;E;Options|'
'TXT_OP_RELEASE;D;OP-Release|'
'TXT_OP_RELEASE;E;OP release|'
'TXT_ORIGINAL_LANG;D;Originalsprache|'
'TXT_ORIGINAL_LANG;E;Original lang.|'
'TXT_ORIGINAL_LANGUAGE;D;Originalsprache|'
'TXT_ORIGINAL_LANGUAGE;E;Original language|'
'TXT_ORIGIN_OF_THE_INPUT_HELP;D;Herkunft der Eingabehilfe|'
'TXT_ORIGIN_OF_THE_INPUT_HELP;E;Origin of the Input Help|'
'TXT_OTHER_ATTRIBUTES;D;Weitere Attribute|'
'TXT_OTHER_ATTRIBUTES;E;Other attributes|'
'TXT_OUTPUT;D;Ausgabe|'
'TXT_OUTPUT;E;Output|'
'TXT_OUTPUT_CHARACTERISTICS;D;Ausgabeeigenschaften|'
'TXT_OUTPUT_CHARACTERISTICS;E;Output characteristics|'
'TXT_OUTPUT_LENGTH;D;Ausgabel&#xE4;nge|'
'TXT_OUTPUT_LENGTH;E;Output length|'
'TXT_OUTPUT_ONLY;D;NurAusgabe|'
'TXT_OUTPUT_ONLY;E;Output only|'
'TXT_OVERVIEW_SCREEN;D;&#xDC;bersichtsbild|'
'TXT_OVERVIEW_SCREEN;E;Overview screen|'
'TXT_OWNER;D;Owner|'
'TXT_OWNER;E;Owner|'
'TXT_PACKAGE;D;Paket|'
'TXT_PACKAGE;E;Package|'
'TXT_PACKAGES_INCLUDED;D;Enthaltene Pakete|'
'TXT_PACKAGES_INCLUDED;E;Packages included|'
'TXT_PACKAGE_CHECK_AS_CLIENT;D;Paketpr&#xFC;fung als Client|'
'TXT_PACKAGE_CHECK_AS_CLIENT;E;Package Check as Client|'
'TXT_PACKAGE_CHECK_AS_SERVER;D;Paketpr&#xFC;fung als Server|'
'TXT_PACKAGE_CHECK_AS_SERVER;E;Package Check as Server|'
'TXT_PACKAGE_INTERFACE;D;Paketschnittstelle|'
'TXT_PACKAGE_INTERFACE;E;Package Interface|'
'TXT_PACKAGE_INTERFACES;D;Paketschnittstellen|'
'TXT_PACKAGE_INTERFACES;E;Package interfaces|'
'TXT_PACKAGE_NOT_EXTENDABLE;D;Paket nicht erweiterbar|'
'TXT_PACKAGE_NOT_EXTENDABLE;E;Package not extendable|'
'TXT_PACKAGE_PROPERTIES;D;Paketeigenschaften|'
'TXT_PACKAGE_PROPERTIES;E;Package properties|'
'TXT_PAGE;D;Seite|'
'TXT_PAGE;E;Page|'
'TXT_PAGES_WITH_FLOW_LOGIC;D;Seiten mit Ablauflogik|'
'TXT_PAGES_WITH_FLOW_LOGIC;E;Pages with Flow Logic|'
'TXT_PAGE_ATTRIBUTES;D;Seitenattribute|'
'TXT_PAGE_ATTRIBUTES;E;Page Attributes|'
'TXT_PAGE_DONE_IS_NOT_RETURNED_;D;Keine R&#xFC;ckgabe von &#x27;PAGE '
'DONE&#x27; am Ende des BSP-Elements|'
'TXT_PAGE_DONE_IS_NOT_RETURNED_;E;&#x22;PAGE DONE&#x22; is not return'
'ed at end of BSP element|'
'TXT_PAGE_FRAGMENT;D;Seitenfragment|'
'TXT_PAGE_FRAGMENT;E;Page Fragment|'
'TXT_PAGE_FRAGMENTS;D;Seitenfragmente|'
'TXT_PAGE_FRAGMENTS;E;Page Fragments|'
'TXT_PAGE_TYPE;D;Seitentyp|'
'TXT_PAGE_TYPE;E;Page Type|'
'TXT_PAGE_WITH_FLOW_LOGIC;D;Seite mit Ablauflogik|'
'TXT_PAGE_WITH_FLOW_LOGIC;E;Page with Flow Logik|'
'TXT_PARAMETER;D;Parameter|'
'TXT_PARAMETER;E;Parameter|'
'TXT_PARAMETERS;D;Parameter|'
'TXT_PARAMETERS;E;Parameters|'
'TXT_PARAMETER_ID;D;Parameter-Id|'
'TXT_PARAMETER_ID;E;Parameter ID|'
'TXT_PARAMETER_NAME;D;Parametername|'
'TXT_PARAMETER_NAME;E;Parameter Name|'
'TXT_PARAMETER_TRANSACTION;D;Parametertransaktion|'
'TXT_PARAMETER_TRANSACTION;E;Parameter transaction|'
'TXT_PASS_VALUE;D;Wert&#xFC;bergabe|'
'TXT_PASS_VALUE;E;Pass Value|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_PERSON_RESPONS;D;Verantwortlich|'
'TXT_PERSON_RESPONS;E;Person respons.|'
'TXT_PERSON_RESPONSIBLE___1;D;Verantwortlicher|'
'TXT_PERSON_RESPONSIBLE___1;E;Person Responsible|'
'TXT_PERSON_RESPONSIBLE___2;D;Verantwortlicher|'
'TXT_PERSON_RESPONSIBLE___2;E;Person responsible|'
'TXT_PERVASIVE_ENABLED;D;Pervasive enabled|'
'TXT_PERVASIVE_ENABLED;E;Pervasive enabled|'
'TXT_PLATFORM_ID;D;Plattform-Id|'
'TXT_PLATFORM_ID;E;Platform ID|'
'TXT_PLEASE_ENTER_A_ROOT_DIR;D;Bitte geben Sie ein Wurzelverzeichnis '
'ein.|'
'TXT_PLEASE_ENTER_A_ROOT_DIR;E;Please enter a root directory.|'
'TXT_PLEASE_ENTER_A_VALID_PATH;D;Bitte ein g&#xFC;ltiges Verzeichnis '
'angeben|'
'TXT_PLEASE_ENTER_A_VALID_PATH;E;Please enter a valid path name|'
'TXT_POOLED_TABLE;D;Pool-Tabelle|'
'TXT_POOLED_TABLE;E;Pooled Table|'
'TXT_POOL_CLUSTER;D;Pool/Cluster|'
'TXT_POOL_CLUSTER;E;Pool/cluster|'
'TXT_POSITION;D;Position|'
'TXT_POSITION;E;Position|'
'TXT_POSS_ENTRIES_KEY;D;Eingabehilfetaste|'
'TXT_POSS_ENTRIES_KEY;E;Poss. entries key|'
'TXT_PREVIOUS_LOGON;D;Vorige Anmeldung|'
'TXT_PREVIOUS_LOGON;E;Previous logon|'
'TXT_PRIMARY_TABLE;D;Prim&#xE4;rtabelle|'
'TXT_PRIMARY_TABLE;E;Primary table|'
'TXT_PROCESSING_TYPE;D;Ablaufart|'
'TXT_PROCESSING_TYPE;E;Processing type|'
'TXT_PRODUCT_UNDER_GPL;D;Dieses Produkt ist zu den Bedingungen der #G'
'PL# freigegeben.|'
'TXT_PRODUCT_UNDER_GPL;E;This product is released under the terms of '
'the #GPL#.|'
'TXT_PROFESSIONAL_USER_TRANSACT;D;Professional User Transaction|'
'TXT_PROFESSIONAL_USER_TRANSACT;E;Professional User Transaction|'
'TXT_PROGRAM;D;Programm|'
'TXT_PROGRAM;E;Program|'
'TXT_PROGRAMS;D;Programme|'
'TXT_PROGRAMS;E;Programs|'
'TXT_PROGRAM_GUI;D;Programm (GUI)|'
'TXT_PROGRAM_GUI;E;Program (GUI)|'
'TXT_PROGRAM_NAME;D;Programmname|'
'TXT_PROGRAM_NAME;E;Program name|'
'TXT_PROGRAM_SCREEN;D;Programm (Dynpro)|'
'TXT_PROGRAM_SCREEN;E;Program (screen)|'
'TXT_PROGRAM_STATUS;D;Programmstatus|'
'TXT_PROGRAM_STATUS;E;Program status|'
'TXT_PROPERTIES;D;Eigenschaften|'
'TXT_PROPERTIES;E;Properties|'
'TXT_PROPERTY_LIST;D;Property-Liste|'
'TXT_PROPERTY_LIST;E;Property list|'
'TXT_QUANTITY_FIELD;D;Mengenfeld|'
'TXT_QUANTITY_FIELD;E;Quantity field|'
'TXT_READ_ONLY;D;Read-Only|'
'TXT_READ_ONLY;E;Read-Only|'
'TXT_RECORDING_ROUTINE;D;Aufzeichnungsroutine|'
'TXT_RECORDING_ROUTINE;E;Recording routine|'
'TXT_REFERENCES;D;Referenzen|'
'TXT_REFERENCES;E;References|'
'TXT_REFERENCE_FIELD;D;Referenzfeld|'
'TXT_REFERENCE_FIELD;E;Reference field|'
'TXT_REFERENCE_TABLE;D;Referenztabelle|'
'TXT_REFERENCE_TABLE;E;Reference table|'
'TXT_REFERENCE_TO_PREDEFINED_TY;D;Referenz auf eingebauten Typ|'
'TXT_REFERENCE_TO_PREDEFINED_TY;E;Reference to Predefined Type|'
'TXT_REFERENCE_TYPE;D;Referenz auf|'
'TXT_REFERENCE_TYPE;E;Reference type|'
'TXT_REF_FIELD;D;Referenzfeld|'
'TXT_REF_FIELD;E;Ref. field|'
'TXT_RELEASE;D;Release|'
'TXT_RELEASE;E;Release|'
'TXT_RELEASED_INTERNALLY;D;Intern freigegeben|'
'TXT_RELEASED_INTERNALLY;E;Release internally|'
'TXT_REMOTE_ENABLED_MODULE;D;Remote f&#xE4;higer Baustein|'
'TXT_REMOTE_ENABLED_MODULE;E;Remote-enabled module|'
'TXT_REPORT;D;Report|'
'TXT_REPORT;E;Report|'
'TXT_REPORT_TRANSACTION;D;Reporttransaktion|'
'TXT_REPORT_TRANSACTION;E;Report transaction|'
'TXT_REPOSITORY_DATA;D;Repository-Daten|'
'TXT_REPOSITORY_DATA;E;Repository data|'
'TXT_REQUIRED;D;Obligatorisch|'
'TXT_REQUIRED;E;Required|'
'TXT_RESP_TO_DBLCLK;D;DKlick-sensitiv|'
'TXT_RESP_TO_DBLCLK;E;Resp. to DblClk|'
'TXT_RESTRICT;D;einschr&#xE4;nken|'
'TXT_RESTRICT;E;restrict|'
'TXT_RIGHT_JUST;D;Rechtsb&#xFC;ndig|'
'TXT_RIGHT_JUST;E;Right-just.|'
'TXT_RSYN_FILE;D;Rsyn-File|'
'TXT_RSYN_FILE;E;Rsyn file|'
'TXT_RTYPE;D;R.typ|'
'TXT_RTYPE;E;RType|'
'TXT_SAPGUI_FOR_HTML;D;SAP GUI f&#xFC;r HTML|'
'TXT_SAPGUI_FOR_HTML;E;SAPGUI for HTML|'
'TXT_SAPGUI_FOR_JAVA;D;SAP GUI f&#xFC;r Java|'
'TXT_SAPGUI_FOR_JAVA;E;SAPGUI f&#xC3;#&#xC2;&#xBC;r Java|'
'TXT_SAPGUI_FOR_WINDOWS;D;SAP GUI f&#xFC;r Windows|'
'TXT_SAPGUI_FOR_WINDOWS;E;SAPGUI for Windows|'
'TXT_SAP_DATA;D;SAP-Daten|'
'TXT_SAP_DATA;E;SAP data|'
'TXT_SAP_SYSTEM_DATA;D;SAP-Systemdaten|'
'TXT_SAP_SYSTEM_DATA;E;SAP System data|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_SAP_VERSIONS;D;SAP-Versionen|'
'TXT_SAP_VERSIONS;E;SAP versions|'
'TXT_SAVED;D;gesichert|'
'TXT_SAVED;E;Saved|'
'TXT_SCREEN;D;Dynpro|'
'TXT_SCREEN;E;Screen|'
'TXT_SCREENS;D;Dynpros|'
'TXT_SCREENS;E;Screens|'
'TXT_SCREEN_FOR;D;Dynpro zu|'
'TXT_SCREEN_FOR;E;Screen for|'
'TXT_SCREEN_GROUP;D;Bildgruppe|'
'TXT_SCREEN_GROUP;E;Screen group|'
'TXT_SCREEN_NUMBER;D;Dynpronummer|'
'TXT_SCREEN_NUMBER;E;Screen number|'
'TXT_SCREEN_TYPE;D;Dynprotyp|'
'TXT_SCREEN_TYPE;E;Screen type|'
'TXT_SCROLLABLE;D;rollbar|'
'TXT_SCROLLABLE;E;Scrollable|'
'TXT_SDIS;D;SAnz|'
'TXT_SDIS;E;SDis|'
'TXT_SEARCH_HELP;D;Suchhilfe|'
'TXT_SEARCH_HELP;E;Search Help|'
'TXT_SEARCH_HELP_EXIT;D;Suchhilfe-Exit|'
'TXT_SEARCH_HELP_EXIT;E;Search help exit|'
'TXT_SEARCH_HELP_PARAMETER;D;Suchhilfeparameter|'
'TXT_SEARCH_HELP_PARAMETER;E;Search help parameter|'
'TXT_SEC;D;Sek.|'
'TXT_SEC;E;Sec.|'
'TXT_SECONDARY_TABLES;D;Sekund&#xE4;rtabellen|'
'TXT_SECONDARY_TABLES;E;Secondary tables|'
'TXT_SELECTION;D;Auswahl|'
'TXT_SELECTION;E;Selection|'
'TXT_SELECTION_CONDITIONS;D;Selektionsbedingungen|'
'TXT_SELECTION_CONDITIONS;E;Selection Conditions|'
'TXT_SELECTION_CRITERIA;D;Auswahl|'
'TXT_SELECTION_CRITERIA;E;Selection criteria|'
'TXT_SELECTION_METHOD;D;Selektionsmethode|'
'TXT_SELECTION_METHOD;E;Selection method|'
'TXT_SELECTION_SCREEN;D;Selektionsdynpro|'
'TXT_SELECTION_SCREEN;E;Selection screen|'
'TXT_SELECTION_SCREEN_VERSION;D;Selektionsbildversion|'
'TXT_SELECTION_SCREEN_VERSION;E;Selection screen version|'
'TXT_SELECTION_TEXTS;D;Selektionstexte|'
'TXT_SELECTION_TEXTS;E;Selection texts|'
'TXT_SELECT_ALL;D;Alle markieren|'
'TXT_SELECT_ALL;E;Select All|'
'TXT_SELF_EXPLANATY;D;Selbsterkl&#xE4;rend|'
'TXT_SELF_EXPLANATY;E;Self-exlanat&#x27;y|'
'TXT_SERVER_CACHE;D;Server Cache|'
'TXT_SERVER_CACHE;E;Server Cache|'
'TXT_SERVER_NAME;D;Servername|'
'TXT_SERVER_NAME;E;Server name|'
'TXT_SERVICE;D;Service|'
'TXT_SERVICE;E;Service|'
'TXT_SETTINGS;D;Einstellungen|'
'TXT_SETTINGS;E;Settings|'
'TXT_SET_GET_PARAMETERS;D;SET/GET-Parameter|'
'TXT_SET_GET_PARAMETERS;E;SET/GET Parameters|'
'TXT_SET_PARAMETER;D;Set Parameter|'
'TXT_SET_PARAMETER;E;SET parameter|'
'TXT_SHARED_MEMORY_ENABLED;D;Shared memory f&#xE4;hig|'
'TXT_SHARED_MEMORY_ENABLED;E;Shared memory enabled|'
'TXT_SHORT;D;kurz|'
'TXT_SHORT;E;Short|'
'TXT_SHORT_DESCRIPTION_OF_SOFTW;D;Kurzbeschreibung der Softwarekompon'
'ente|'
'TXT_SHORT_DESCRIPTION_OF_SOFTW;E;Short Description of Software Compo'
'nent|'
'TXT_SHORT_DESCRIPTION___1;D;Kurzbeschreibung|'
'TXT_SHORT_DESCRIPTION___1;E;Short description|'
'TXT_SHORT_DESCRIPTION___2;D;Kurzbeschreibung|'
'TXT_SHORT_DESCRIPTION___2;E;Short Description|'
'TXT_SHORT_TEXT___1;D;Kurztext|'
'TXT_SHORT_TEXT___1;E;Short Text|'
'TXT_SHORT_TEXT___2;D;Kurzbeschreibung|'
'TXT_SHORT_TEXT___2;E;Short Text|'
'TXT_SIGN;D;Vorzeichen|'
'TXT_SIGN;E;Sign|'
'TXT_SINGLE_RECORDS_BUFF;D;Einzels&#xE4;tze gepuffert|'
'TXT_SINGLE_RECORDS_BUFF;E;Single records buff.|'
'TXT_SINGLE_SCREEN;D;Einzelbild|'
'TXT_SINGLE_SCREEN;E;Single screen|'
'TXT_SINGLE_VARS;D;Einzelwerte|'
'TXT_SINGLE_VARS;E;Single vars|'
'TXT_SIZE_CATEGORY;D;Gr&#xF6;&#xDF;enkategorie|'
'TXT_SIZE_CATEGORY;E;Size category|'
'TXT_SKIP_INITIAL_SCREEN;D;Einstiegsbild &#xFC;berspringen|'
'TXT_SKIP_INITIAL_SCREEN;E;Skip initial screen|'
'TXT_SOFTWARE_COMPONENT;D;Softwarekomponente|'
'TXT_SOFTWARE_COMPONENT;E;Software Component|'
'TXT_SOURCECDE;D;Quelltext|'
'TXT_SOURCECDE;E;SourceCde|'
'TXT_SOURCE_CODE;D;Quelltext|'
'TXT_SOURCE_CODE;E;Source code|'
'TXT_SPECIAL_ATTR;D;Spez. Attrib.|'
'TXT_SPECIAL_ATTR;E;Special attr.|'
'TXT_SPOS;D;SPos|'
'TXT_SPOS;E;SPos|'
'TXT_SRCH_HELP;D;Suchhilfe|'
'TXT_SRCH_HELP;E;Srch help|'
'TXT_SRCH_HELPS;D;Suchhilfen|'
'TXT_SRCH_HELPS;E;Srch Helps|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_STANDARD_RECORDING_ROUTINE;D;Standard Aufzeichnungsroutine|'
'TXT_STANDARD_RECORDING_ROUTINE;E;Standard recording routine|'
'TXT_START;D;Start|'
'TXT_START;E;Start|'
'TXT_START_DELAYED;D;Start verz&#xF6;gert|'
'TXT_START_DELAYED;E;Start delayed|'
'TXT_START_IMMED;D;Start sofort|'
'TXT_START_IMMED;E;Start immed.|'
'TXT_START_USING_VARIANT;D;Start &#xFC;ber Variante|'
'TXT_START_USING_VARIANT;E;Start using variant|'
'TXT_START_WITH_VARIANT;D;Start mit Variante|'
'TXT_START_WITH_VARIANT;E;Start with variant|'
'TXT_STATEFUL;D;Zustandsbehaftet|'
'TXT_STATEFUL;E;Stateful|'
'TXT_STATUS;D;Status|'
'TXT_STATUS;E;Status|'
'TXT_STRUCTURE;D;Struktur|'
'TXT_STRUCTURE;E;Structure|'
'TXT_STRUCTURED_ROW_TYPE;D;Strukturierter Zeilentyp|'
'TXT_STRUCTURED_ROW_TYPE;E;Structured row type|'
'TXT_STRUCTURED_TYPE;D;Strukturierter Typ|'
'TXT_STRUCTURED_TYPE;E;Structured Type|'
'TXT_STRUCTURES;D;Strukturen|'
'TXT_STRUCTURES;E;Structures|'
'TXT_SUBSCREEN;D;Subscreen|'
'TXT_SUBSCREEN;E;Subscreen|'
'TXT_SUPERCLASS;D;Erbt von|'
'TXT_SUPERCLASS;E;Superclass|'
'TXT_SUPPLEMENTARY_DOCUMENTATIO;D;Zusatzdokumentation|'
'TXT_SUPPLEMENTARY_DOCUMENTATIO;E;Supplementary Documentation|'
'TXT_SUPPORTS_PORTAL_INTEGRATIO;D;Unterst&#xFC;tzt Portal-Integration|'
'TXT_SUPPORTS_PORTAL_INTEGRATIO;E;Supports Portal Integration|'
'TXT_SUP_PKG_LVL;D;Patch-Level|'
'TXT_SUP_PKG_LVL;E;Sup.Pkg lvl.|'
'TXT_SURROUNDING_PACKAGE;D;Direkt umgebendes Paket|'
'TXT_SURROUNDING_PACKAGE;E;Surrounding package|'
'TXT_SWITCH_OFF_RUNTIME_COMPRES;D;Abschalten der Komprimierung des Dy'
'npros zur Laufzeit|'
'TXT_SWITCH_OFF_RUNTIME_COMPRES;E;Switch off runtime compress|'
'TXT_SYMBOL;D;Symbol|'
'TXT_SYMBOL;E;Symbol|'
'TXT_SYSTEM;D;System|'
'TXT_SYSTEM;E;System|'
'TXT_SYSTEM_INFORMATION;D;Systeminformation|'
'TXT_SYSTEM_INFORMATION;E;System information|'
'TXT_SYSTEM_TIME;D;Systemzeit|'
'TXT_SYSTEM_TIME;E;System time|'
'TXT_TABLE;D;Tabelle|'
'TXT_TABLE;E;Table|'
'TXT_TABLES;D;Tabellen|'
'TXT_TABLES;E;Tables|'
'TXT_TABLE_MAINTENANCE_GENERATO;D;Tabellenpflegegenerator|'
'TXT_TABLE_MAINTENANCE_GENERATO;E;Table Maintenance Generator|'
'TXT_TABLE_TYPE;D;Tabellentyp|'
'TXT_TABLE_TYPE;E;Table Type|'
'TXT_TABLE_TYPES;D;Tabellentypen|'
'TXT_TABLE_TYPES;E;Table Types|'
'TXT_TARGET;D;Ziel|'
'TXT_TARGET;E;Target|'
'TXT_TECHNICAL_DIALOG_DETAILS;D;Technische Angaben zum Dialog|'
'TXT_TECHNICAL_DIALOG_DETAILS;E;Technical Dialog Details|'
'TXT_TECHNICAL_SETTINGS;D;Technische Einstellungen|'
'TXT_TECHNICAL_SETTINGS;E;Technical Settings|'
'TXT_TEMPLATE_NON_EXECUTABLE;D;Vorlagedynpro - nicht ausf&#xFC;hrbar|'
'TXT_TEMPLATE_NON_EXECUTABLE;E;Template - non-executable|'
'TXT_TEXT;D;Text|'
'TXT_TEXT;E;Text|'
'TXT_TEXTS_IO_TEMPLATES;D;Texte u. E/A-Schabl.|'
'TXT_TEXTS_IO_TEMPLATES;E;Texts/ I/O templates|'
'TXT_TEXT_ELEMENTS;D;Textelemente|'
'TXT_TEXT_ELEMENTS;E;Text elements|'
'TXT_TEXT_OR_IO_FIELD;D;Text o. E/A-Schablone|'
'TXT_TEXT_OR_IO_FIELD;E;Text or I/O field|'
'TXT_TEXT_TABLE;D;Texttabelle|'
'TXT_TEXT_TABLE;E;Text table|'
'TXT_THEME;D;Thema|'
'TXT_THEME;E;Theme|'
'TXT_TIME_CHANGED;D;&#xC4;nderungsuhrzeit|'
'TXT_TIME_CHANGED;E;Time changed|'
'TXT_TITLE;D;Titel|'
'TXT_TITLE;E;Title|'
'TXT_TRANSACTION;D;Transaktion|'
'TXT_TRANSACTION;E;Transaction|'
'TXT_TRANSACTIONS;D;Transaktionen|'
'TXT_TRANSACTIONS;E;Transactions|'
'TXT_TRANSACTION_CLASSIFICATION;D;Transaktionsklassifikation|'
'TXT_TRANSACTION_CLASSIFICATION;E;Transaction classification|'
'TXT_TRANSACTION_CODE;D;Transaktionscode|'
'TXT_TRANSACTION_CODE;E;Transaction code|'
'TXT_TRANSACTION_TEXT;D;Transaktionstext|'
'TXT_TRANSACTION_TEXT;E;Transaction text|'
'TXT_TRANSACTION_VARIANT;D;Transaktionsvariante|'
'TXT_TRANSACTION_VARIANT;E;Transaction variant|'
'TXT_TRANSFER_OPTIONS;D;&#xDC;bertragungsoptionen|'
'TXT_TRANSFER_OPTIONS;E;Transfer Options|'
'TXT_TRANSFORMATION;D;Transformation|'
'TXT_TRANSFORMATION;E;Transformation|'
'TXT_TRANSFORMATIONS;D;Transformationen|'
'TXT_TRANSFORMATIONS;E;Transformations|'
'TXT_TRANSPORT_ATTRIBUTES;D;Transporteigenschaften|'
'TXT_TRANSPORT_ATTRIBUTES;E;Transport attributes|'
space into ls_csv.
append ls_csv to ct_csv.
concatenate
'TXT_TRANSPORT_LAYER;D;Transportschicht|'
'TXT_TRANSPORT_LAYER;E;Transport Layer|'
'TXT_TRANSP_TABLE;D;Transp.Tabelle|'
'TXT_TRANSP_TABLE;E;Transp. table|'
'TXT_TWO_STEP;D;zweistufig|'
'TXT_TWO_STEP;E;two step|'
'TXT_TYPES;D;Typen|'
'TXT_TYPES;E;Types|'
'TXT_TYPE_DEFINITIONS;D;Typdefinitionen|'
'TXT_TYPE_DEFINITIONS;E;Type Definitions|'
'TXT_TYPE_GROUP;D;Typgruppe|'
'TXT_TYPE_GROUP;E;Type group|'
'TXT_TYPE_GRPS;D;Typgruppen|'
'TXT_TYPE_GRPS;E;Type Grps|'
'TXT_TYPE_IS_GENERIC;D;Typ ist generisch|'
'TXT_TYPE_IS_GENERIC;E;Type is Generic|'
'TXT_TYPE_OF_SCREEN_ELEMENT;D;Typ des Dynproelementes|'
'TXT_TYPE_OF_SCREEN_ELEMENT;E;Type of screen element|'
'TXT_TYPE_SPEC;D;Typisierung|'
'TXT_TYPE_SPEC;E;Type spec.|'
'TXT_TYPE___1;D;Typ|'
'TXT_TYPE___1;E;Type|'
'TXT_TYPE___2;D;Art|'
'TXT_TYPE___2;E;Type|'
'TXT_TYPING;D;Typisierungsart|'
'TXT_TYPING;E;Typing|'
'TXT_TYPINGMETH;D;TypArt|'
'TXT_TYPINGMETH;E;TypingMeth|'
'TXT_TYPING_METHOD;D;Typisierungsart|'
'TXT_TYPING_METHOD;E;Typing method|'
'TXT_UNICODE_CHECKS;D;Unicodepr&#xFC;fungen|'
'TXT_UNICODE_CHECKS;E;Unicode checks|'
'TXT_UNICODE_SYSTEM;D;Unicode-System|'
'TXT_UNICODE_SYSTEM;E;Unicode System|'
'TXT_UPDATES;D;Updates|'
'TXT_UPDATES;E;Updates|'
'TXT_UPDATE_MODULE;D;Verbuchungsbaustein|'
'TXT_UPDATE_MODULE;E;Update module|'
'TXT_UPPERLIMIT;D;Obergrenze|'
'TXT_UPPERLIMIT;E;UpperLimit|'
'TXT_UPPER_LOWER_CASE_ENTRY;D;Gro&#xDF;-Kleinschreibung bei Eingabe|'
'TXT_UPPER_LOWER_CASE_ENTRY;E;Upper/lower case entry|'
'TXT_URL;D;URL|'
'TXT_URL;E;URL|'
'TXT_USAGE_DATA;D;Benutzungsdaten|'
'TXT_USAGE_DATA;E;Usage data|'
'TXT_USER;D;Benutzer|'
'TXT_USER;E;User|'
'TXT_USER_DEFINED_VALIDATION;D;Benutzerdefinierte Validierung|'
'TXT_USER_DEFINED_VALIDATION;E;User-Defined Validation|'
'TXT_USE_ACCESS;D;Verwendungserkl&#xE4;rung|'
'TXT_USE_ACCESS;E;Use access|'
'TXT_VALUE;D;Wert|'
'TXT_VALUE;E;Value|'
'TXT_VALUES;D;Werte|'
'TXT_VALUE_LIST;D;Werteliste|'
'TXT_VALUE_LIST;E;Value list|'
'TXT_VALUE_RANGE;D;Wertebereich|'
'TXT_VALUE_RANGE;E;Value range|'
'TXT_VARIANT;D;Variante|'
'TXT_VARIANT;E;Variant|'
'TXT_VARIANTS;D;Varianten|'
'TXT_VARIANTS;E;Variants|'
'TXT_VARIANTS_OF_REPORTS;D;Varianten der Programme|'
'TXT_VARIANTS_OF_REPORTS;E;variants of reports|'
'TXT_VARIANT_TRANSACTION;D;Variantentransaktion|'
'TXT_VARIANT_TRANSACTION;E;Variant transaction|'
'TXT_VERSION;D;Version|'
'TXT_VERSION;E;Version|'
'TXT_VIEW;D;View|'
'TXT_VIEW;E;View|'
'TXT_VIEWS;D;Views|'
'TXT_VIEWS;E;Views|'
'TXT_VIEW_FIELD;D;Viewfeld|'
'TXT_VIEW_FIELD;E;View field|'
'TXT_VIEW_FLDS;D;Viewfelder|'
'TXT_VIEW_FLDS;E;View Flds|'
'TXT_VISIBILITY;D;Sichtbarkeit|'
'TXT_VISIBILITY;E;Visibility|'
'TXT_VISIBLE;D;Sichtbar|'
'TXT_VISIBLE;E;Visible|'
'TXT_VISLG;D;visLg|'
'TXT_VISLG;E;VisLg|'
'TXT_W;D;Gew.|'
'TXT_W;E;W|'
'TXT_WITHOUT_APPLICATION_TOOLBA;D;Ohne Applikationstoolbar|'
'TXT_WITHOUT_APPLICATION_TOOLBA;E;Without Application Toolbar|'
'TXT_WITHOUT_TEMPLATE;D;Ohne Schablone|'
'TXT_WITHOUT_TEMPLATE;E;Without Template|'
'TXT_WITH_ICON;D;mit Ikone|'
'TXT_WITH_ICON;E;With icon|'
'TXT_WO_SCRIPT_CODE;D;ohne Skriptcode|'
'TXT_WO_SCRIPT_CODE;E;W/O Script Code|'
'TXT_YES;D;ja|'
'TXT_YES;E;Yes|'
'VAR_NAME_VALUE;D;#NAME_VALUE#|'
'VAR_NAME_VALUE;E;#NAME_VALUE#|'
space into ls_csv.
append ls_csv to ct_csv.
endform.  "csv_text_elements_2
form csv_varid_broken
changing ct_csv type it_string.
refresh ct_csv.
data ls_csv type string.
concatenate
'RSAMTUSS;DEFAULT|'
'RSEIDOC2;ALLE-IDOCS|'
'RSEIDOC2;ALLE-IDOCS-AUS|'
'RSEINB00;UM-V1|'
'RSEOUT00;SAP_TESTHDI01|'
space into ls_csv.
append ls_csv to ct_csv.
endform.  "csv_varid_broken
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_CSV_TOOLS                              *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* csv_tools
*-----------------------------------------------------------------------
FORM csv_tools.
  PERFORM csv_tools_text_elements.
  PERFORM text_tools.

  PERFORM csv_tools_table_structure.
  PERFORM csv_tools_tabstrip.
  PERFORM csv_tools_varid_broken.
ENDFORM.                    "csv_tools


*-----------------------------------------------------------------------
* csv_tools_table_structure
*-----------------------------------------------------------------------
FORM csv_tools_table_structure.
  DATA:
  lt_csv TYPE it_string,
  lt_row TYPE it_string,
  ls_row TYPE string,
  ls_table TYPE st_table_structure.

  FIELD-SYMBOLS:
  <ls_csv> TYPE string,
  <l_fs> TYPE ANY.

  REFRESH gt_table_structure.

  PERFORM csv_table_structure CHANGING lt_csv.

  LOOP AT lt_csv ASSIGNING <ls_csv>.
    SPLIT <ls_csv> AT '|' INTO TABLE lt_row.
    LOOP AT lt_row INTO ls_row.
      IF NOT ls_row IS INITIAL.
        CLEAR ls_table.
        SPLIT ls_row AT ';' INTO
            ls_table-id
            ls_table-row_nr
            ls_table-fieldname
            ls_table-title_elem
            ls_table-link_row
            ls_table-row_def
            ls_table-colored_row
            ls_table-comparator
            ls_table-comp_value.
        IF NOT ls_table-title_elem IS INITIAL.
          ASSIGN (ls_table-title_elem) TO <l_fs>.
          ls_table-title = <l_fs>.
          UNASSIGN <l_fs>.
        ENDIF.
        APPEND ls_table TO gt_table_structure.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "csv_tools_table_structure


*-----------------------------------------------------------------------
* csv_tools_tabstrip
*-----------------------------------------------------------------------
FORM csv_tools_tabstrip.
  DATA:
  lt_csv TYPE it_string,
  lt_row TYPE it_string,
  ls_row TYPE string,
  ls_tabstrip TYPE st_tabstrip.

  FIELD-SYMBOLS:
  <ls_csv> TYPE string,
  <l_fs> TYPE ANY.

  REFRESH gt_tabstrip.

  PERFORM csv_tabstrip CHANGING lt_csv.

  LOOP AT lt_csv ASSIGNING <ls_csv>.
    SPLIT <ls_csv> AT '|' INTO TABLE lt_row.
    LOOP AT lt_row INTO ls_row.
      IF NOT ls_row IS INITIAL.
        CLEAR ls_tabstrip.
        SPLIT ls_row AT ';' INTO
            ls_tabstrip-form
            ls_tabstrip-id
            ls_tabstrip-parent_id
            ls_tabstrip-tab_nr
            ls_tabstrip-firstrow
            ls_tabstrip-active_order
            ls_tabstrip-text_elem
            ls_tabstrip-comparator
            ls_tabstrip-comp_value.
        IF NOT ls_tabstrip-text_elem IS INITIAL.
          ASSIGN (ls_tabstrip-text_elem) TO <l_fs>.
          ls_tabstrip-text = <l_fs>.
          UNASSIGN <l_fs>.
        ENDIF.
        APPEND ls_tabstrip TO gt_tabstrip.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "csv_tools_tabstrip


*-----------------------------------------------------------------------
* csv_tools_text_elements
*-----------------------------------------------------------------------
FORM csv_tools_text_elements.
  DATA:
  lt_csv TYPE it_string,
  lt_row TYPE it_string,
  ls_row TYPE string,
  ls_text_element TYPE st_text_element,
  ls_text_element_t TYPE st_text_element_t.

  FIELD-SYMBOLS:
  <ls_csv> TYPE string.

*txt
  REFRESH gt_text_element.

  PERFORM csv_text_elements_1 CHANGING lt_csv.

  LOOP AT lt_csv ASSIGNING <ls_csv>.
    SPLIT <ls_csv> AT '|' INTO TABLE lt_row.
    LOOP AT lt_row INTO ls_row.
      IF NOT ls_row IS INITIAL.
        SPLIT ls_row AT ';' INTO
          ls_text_element-fieldname
          ls_text_element-txt_prefix
          ls_text_element-dtel_rollname
          ls_text_element-dtel_field
          ls_text_element-domname
          ls_text_element-domvalue
          ls_text_element-icon_id
          ls_text_element-icon_field
          ls_text_element-conc_v1
          ls_text_element-conc_copula
          ls_text_element-conc_v2
          ls_text_element-conc_sep_space
          ls_text_element-msg_id
          ls_text_element-msg_nr
          ls_text_element-msg_v1
          ls_text_element-msg_v2
          ls_text_element-msg_v3
          ls_text_element-msg_v4.
        APPEND ls_text_element TO gt_text_element.
      ENDIF.
    ENDLOOP.
  ENDLOOP.

*txtt
  REFRESH gt_text_element_t.

  PERFORM csv_text_elements_2 CHANGING lt_csv.

  LOOP AT lt_csv ASSIGNING <ls_csv>.
    SPLIT <ls_csv> AT '|' INTO TABLE lt_row.
    LOOP AT lt_row INTO ls_row.
      IF NOT ls_row IS INITIAL.
        SPLIT ls_row AT ';' INTO
          ls_text_element_t-fieldname
          ls_text_element_t-spras
          ls_text_element_t-text.
        APPEND ls_text_element_t TO gt_text_element_t.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "csv_tools_text_elements


*-----------------------------------------------------------------------
* csv_tools_varid_broken
*-----------------------------------------------------------------------
FORM csv_tools_varid_broken.
  DATA:
  lt_csv TYPE it_string,
  lt_row TYPE it_string,
  ls_row TYPE string,
  ls_varid TYPE st_varid.

  FIELD-SYMBOLS:
  <ls_csv> TYPE string.

  REFRESH gt_varid_broken.

  PERFORM csv_varid_broken CHANGING lt_csv.

  LOOP AT lt_csv ASSIGNING <ls_csv>.
    SPLIT <ls_csv> AT '|' INTO TABLE lt_row.
    LOOP AT lt_row INTO ls_row.
      IF NOT ls_row IS INITIAL.
        SPLIT ls_row AT ';' INTO ls_varid-report ls_varid-vari.
        APPEND ls_varid TO gt_varid_broken.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "csv_tools_varid_broken
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_DOWNLOAD                               *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* form: download
*-----------------------------------------------------------------------
FORM download
  USING
    it_html TYPE it_string
    value(i_pgmid)
    value(i_object)
    value(i_filename)
    value(i_extension)
    value(i_do_count).

  DATA:
  l_infoline TYPE syucomm,
  l_uri TYPE string,
  l_sub_uri TYPE char255,
*  l_dbl_delimiter type string,
*  l_cnt_downloads type string,
*  l_cnt_elems type string,
  l_txt TYPE string,
  l_message TYPE string,
  l_codepage(20) TYPE c.

  PERFORM download_get_params
    USING
      i_pgmid
      i_object
      i_filename
      i_extension
      i_do_count
    CHANGING
      l_uri
      l_sub_uri
      l_infoline.

  PERFORM download_replace_wildcards
    USING
      l_sub_uri
    CHANGING
      it_html.

*  if i_do_count = abap_true.
*    g_cnt_downloads = g_cnt_downloads + 1.
*  endif.
*
*  l_cnt_downloads = g_cnt_downloads.
*  condense l_cnt_downloads.
*  l_cnt_elems = g_cnt_elems.
*  condense l_cnt_elems.
*  perform get_message_text using 'DSVAS' '226'
*                               i_filename space space space
*                         changing l_message.
*  concatenate
*    l_cnt_downloads '/' l_cnt_elems '|'
*    l_message into l_infoline
*    separated by space.
*
*  concatenate g_folder g_c_delimiter g_pack g_c_delimiter into l_uri.
*  if not i_pgmid is initial and not i_object is initial.
*    concatenate l_uri i_pgmid '_' i_object g_c_delimiter into l_uri.
*  endif.
*  concatenate l_uri i_filename into l_uri.
*  if not i_extension is initial.
*    concatenate l_uri '.' i_extension into l_uri.
*  endif.
*  concatenate g_c_delimiter g_c_delimiter into l_dbl_delimiter.
*  perform replace_all
*    using '/' g_c_delimiter
*    changing l_uri.
*  perform replace_all
*    using '<' '-'
*    changing l_uri.
*  perform replace_all
*    using '>' '-'
*    changing l_uri.
*  while l_uri cs l_dbl_delimiter.
*    perform replace_all
*      using l_dbl_delimiter g_c_delimiter
*      changing l_uri.
*  endwhile.

  IF NOT i_extension = gc_extension_htm
  AND NOT i_extension = gc_extension_xml.
    l_codepage = '4110'.                                    "UTF-8
  ENDIF.

  IF g_has_download_status = abap_true.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename             = l_uri
        codepage             = l_codepage
        show_transfer_status = abap_false
      TABLES
        data_tab             = it_html
      EXCEPTIONS
        OTHERS               = 1.
  ELSE.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename = l_uri
        codepage = l_codepage
      TABLES
        data_tab = it_html
      EXCEPTIONS
        OTHERS   = 1.
  ENDIF.
  IF sy-subrc <> 0.
    CLEAR l_message.
    l_txt = sy-subrc.
    CONDENSE l_txt.
    CONCATENATE 'RC=' l_txt ',' INTO l_txt.
    PERFORM get_message_text USING 'MEREP_00' '245'
                                   l_txt space space space
                             CHANGING l_message.
    CONCATENATE l_message l_uri INTO l_message SEPARATED BY space.
    WRITE / l_message.
  ELSE.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        text = l_infoline.
  ENDIF.

ENDFORM.                    "download


*-----------------------------------------------------------------------
* form: download_binary
*-----------------------------------------------------------------------
FORM download_binary
  USING
    it_content TYPE it_o2content_binary
    value(i_bin_filesize) TYPE i
    value(i_pgmid)
    value(i_object)
    value(i_filename)
    value(i_extension)
    value(i_do_count).

  DATA:
  l_infoline TYPE syucomm,
  l_uri TYPE string,
  l_sub_uri TYPE char255,
  l_txt TYPE string,
  l_message TYPE string.

  PERFORM download_get_params
    USING
      i_pgmid
      i_object
      i_filename
      i_extension
      i_do_count
    CHANGING
      l_uri
      l_sub_uri
      l_infoline.

  IF g_has_download_status = abap_true.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        bin_filesize         = i_bin_filesize
        filename             = l_uri
        filetype             = 'BIN'
        show_transfer_status = abap_false
      TABLES
        data_tab             = it_content
      EXCEPTIONS
        OTHERS               = 2.
  ELSE.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        bin_filesize = i_bin_filesize
        filename     = l_uri
        filetype     = 'BIN'
      TABLES
        data_tab     = it_content
      EXCEPTIONS
        OTHERS       = 2.
  ENDIF.
  IF sy-subrc <> 0.
    CLEAR l_message.
    l_txt = sy-subrc.
    CONDENSE l_txt.
    CONCATENATE 'RC=' l_txt ',' INTO l_txt.
    PERFORM get_message_text USING 'MEREP_00' '245'
                                   l_txt space space space
                             CHANGING l_message.
    CONCATENATE l_message l_uri INTO l_message SEPARATED BY space.
    WRITE / l_message.
  ELSE.
    CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
      EXPORTING
        text = l_infoline.
  ENDIF.

ENDFORM.                    "download_binary


*-----------------------------------------------------------------------
* form: download_get_params
*-----------------------------------------------------------------------
FORM download_get_params
  USING
    value(i_pgmid)
    value(i_object)
    value(i_filename)
    value(i_extension)
    value(i_do_count)
  CHANGING
    c_uri TYPE string
    c_sub_uri TYPE char255
    c_infoline TYPE syucomm.

  DATA:
  l_cnt_downloads TYPE string,
  l_cnt_elems TYPE string,
  l_txt TYPE string,
  l_message TYPE string,
  l_codepage(20) TYPE c.

  CLEAR:
  c_uri,
  c_sub_uri,
  c_infoline.

  IF i_do_count = abap_true.
    g_cnt_downloads = g_cnt_downloads + 1.
  ENDIF.

* new text for infoline
  l_cnt_downloads = g_cnt_downloads.
  CONDENSE l_cnt_downloads.
  l_cnt_elems = g_cnt_elems.
  CONDENSE l_cnt_elems.
  PERFORM get_message_text USING 'DSVAS' '226'
                               i_filename space space space
                         CHANGING l_message.
  CONCATENATE
    l_cnt_downloads '/' l_cnt_elems '|'
    l_message INTO c_infoline
    SEPARATED BY space.



* uri from top folder to file
  IF NOT i_pgmid IS INITIAL AND NOT i_object IS INITIAL.
    CONCATENATE c_uri i_pgmid '_' i_object gc_delimiter INTO c_uri.
  ENDIF.
  CONCATENATE c_uri i_filename INTO c_uri.
  IF NOT i_extension IS INITIAL.
    CONCATENATE c_uri '.' i_extension INTO c_uri.
  ENDIF.

  PERFORM download_make_plain_uri CHANGING c_uri.

  c_sub_uri = c_uri.
  IF c_sub_uri+0(1) = gc_delimiter.
    c_sub_uri = c_sub_uri+1.
  ENDIF.
  c_uri = c_sub_uri.

* full uri
  CONCATENATE g_folder gc_delimiter g_pack gc_delimiter c_uri
      INTO c_uri.
  PERFORM download_make_plain_uri CHANGING c_uri.

ENDFORM.                    "download_get_params


*-----------------------------------------------------------------------
* form: download_make_plain_uri
*-----------------------------------------------------------------------
FORM download_make_plain_uri
  CHANGING
    c_uri TYPE string.

  DATA:
  l_dbl_delimiter TYPE string.

  CONCATENATE gc_delimiter gc_delimiter INTO l_dbl_delimiter.
  PERFORM replace_all
    USING '/' gc_delimiter
    CHANGING c_uri.
  PERFORM replace_all
    USING '<' '-'
    CHANGING c_uri.
  PERFORM replace_all
    USING '>' '-'
    CHANGING c_uri.
  WHILE c_uri CS l_dbl_delimiter.
    PERFORM replace_all
      USING l_dbl_delimiter gc_delimiter
      CHANGING c_uri.
  ENDWHILE.

ENDFORM.                    "download_replace_wildcards


*-----------------------------------------------------------------------
* form: download_replace_wildcards
*-----------------------------------------------------------------------
FORM download_replace_wildcards
  USING
    value(i_sub_uri) TYPE char255
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_index_htm TYPE char255,
  l_cnt TYPE i,
  l_len TYPE i.

  CONSTANTS:
  lc_replacements TYPE i VALUE 2.

  FIELD-SYMBOLS:
  <ls_html> TYPE string.

  l_len = strlen( i_sub_uri ).

* make replacement for ../index.htm
  CONCATENATE 'index.' gc_extension_htm
      INTO l_index_htm.
  DO l_len TIMES.
    IF i_sub_uri+l_cnt(1) = gc_delimiter.
      CONCATENATE '../' l_index_htm INTO l_index_htm.
    ENDIF.
    ADD 1 TO l_cnt.
  ENDDO.

* replace
  CLEAR l_cnt.
  LOOP AT ct_html ASSIGNING <ls_html>.
    IF <ls_html> CS '../index.htm'.
      PERFORM replace_all
        USING
          '##INDEX_HTM##'
          l_index_htm
        CHANGING
          <ls_html>.
      ADD 1 TO l_cnt.
    ENDIF.
    IF l_cnt = lc_replacements.
      EXIT.
    ENDIF.
  ENDLOOP.

ENDFORM.                    "download_replace_wildcards
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_GET                                    *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* get_class_attribute_value
*-----------------------------------------------------------------------
FORM get_class_attribute_value
  USING
    value(i_clsname) TYPE seoclsname
    value(i_cmpname) TYPE seocmpname
  CHANGING
    c_attvalue TYPE seovalue.

  DATA:
  l_len TYPE i.

  CLEAR c_attvalue.
  SELECT SINGLE attvalue FROM seocompodf INTO c_attvalue
      WHERE clsname = i_clsname
      AND cmpname = i_cmpname
      AND version = 1.
  IF sy-subrc = 0.
    IF c_attvalue+0(1) = ''''.
      l_len = strlen( c_attvalue ) - 2.
      c_attvalue = c_attvalue+1(l_len).
    ENDIF.
  ENDIF.

ENDFORM.                    "get_class_attvalue


*-----------------------------------------------------------------------
* get_class_exists
*-----------------------------------------------------------------------
FORM get_class_exists
  USING
    value(i_clsname) TYPE seoclsname
  CHANGING
    c_class_exists TYPE flag.

  DATA:
  l_clsname TYPE seoclsname.

  c_class_exists = abap_false.
  SELECT SINGLE clsname FROM seoclass INTO l_clsname
    WHERE clsname = i_clsname.
  IF sy-subrc = 0.
    c_class_exists = abap_true.
  ENDIF.

ENDFORM.                    "get_class_exists


*-----------------------------------------------------------------------
* get_date
*-----------------------------------------------------------------------
FORM get_date
  USING
    value(i_date) TYPE sydatum
  CHANGING
    c_date TYPE string.

  CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
    EXPORTING
      date_internal = i_date
    IMPORTING
      date_external = c_date.
ENDFORM.                    "get_date


*-----------------------------------------------------------------------
* get_devClass
*-----------------------------------------------------------------------
FORM get_devclass
  USING
    value(i_devclass) TYPE devclass
  CHANGING
    c_text TYPE as4text.

  CLEAR c_text.
  SELECT SINGLE ctext FROM tdevct INTO c_text
      WHERE devclass = i_devclass
      AND spras = sy-langu.
ENDFORM.                    "get_devClass


*-----------------------------------------------------------------------
* get_docu
*-----------------------------------------------------------------------
FORM get_docu
  USING
    value(i_id) TYPE doku_id
    value(i_object) TYPE any
    value(i_typ) TYPE doku_typ
  CHANGING
    ct_str TYPE it_string.

  DATA:
  lt_html TYPE STANDARD TABLE OF htmlline,
  l_object TYPE doku_obj,
  lt_line TYPE STANDARD TABLE OF tline,
  ls_entry TYPE glos_entry,
  l_pos TYPE i.

  FIELD-SYMBOLS:
  <ls_html> TYPE htmlline.

  REFRESH ct_str.
  l_object = i_object.

  CALL FUNCTION 'DOCU_GET'
    EXPORTING
      id     = i_id
      langu  = sy-langu
      object = l_object
      typ    = i_typ
    TABLES
      line   = lt_line
    EXCEPTIONS
      OTHERS = 1.
  CHECK sy-subrc = 0.

  ls_entry-langu = sy-langu.
  CALL FUNCTION 'DOC_SAPSCRIPT_TO_HTML_FORMAT'
    EXPORTING
      entry          = ls_entry
    TABLES
      sapscript_text = lt_line
      html_text      = lt_html.

  CLEAR l_pos.
  LOOP AT lt_html ASSIGNING <ls_html>.
    IF <ls_html>+0(5) = '<BODY'.
      l_pos = sy-tabix.
    ENDIF.
    PERFORM replace_all
      USING '</BODY>' space
      CHANGING <ls_html>.
    PERFORM replace_all
      USING '</HTML>' space
      CHANGING <ls_html>.
  ENDLOOP.
  DO l_pos TIMES.
    DELETE lt_html INDEX 1.
  ENDDO.

  LOOP AT lt_html ASSIGNING <ls_html>.
    APPEND <ls_html>-tdline TO ct_str.
  ENDLOOP.
ENDFORM.                    "get_docu


*-----------------------------------------------------------------------
* get_dom
*-----------------------------------------------------------------------
FORM get_dom
  USING
    value(i_domname) TYPE domname
  CHANGING
    c_text TYPE as4text.

  CLEAR c_text.
  SELECT SINGLE ddtext FROM dd01t INTO c_text
      WHERE domname = i_domname
      AND ddlanguage = sy-langu
      AND as4local = 'A'.
ENDFORM.                    "get_dom


*-----------------------------------------------------------------------
* get_dom_value_text
*-----------------------------------------------------------------------
FORM get_dom_value_text
  USING
    value(i_domname) TYPE domname
    value(i_domvalue) TYPE any
  CHANGING
    c_text TYPE any.

  DATA:
  l_domvalue TYPE domvalue_l,
  l_text TYPE val_text.

  CLEAR c_text.
  l_domvalue = i_domvalue.

  SELECT SINGLE ddtext FROM dd07t INTO l_text
      WHERE domname = i_domname
      AND ddlanguage = sy-langu
      AND as4local = 'A'
      AND domvalue_l = l_domvalue.
  IF sy-subrc = 0.
    c_text = l_text.
  ENDIF.
ENDFORM.                    "getDomValueText


*-----------------------------------------------------------------------
* get_dom_value_texts
*-----------------------------------------------------------------------
FORM get_dom_value_texts
  USING
    value(i_domname) TYPE domname
  CHANGING
    ct_dom_value TYPE it_dom_value.

  DATA:
  lt_dd07t TYPE STANDARD TABLE OF dd07t,
  ls_dom_value TYPE st_dom_value.

  FIELD-SYMBOLS:
  <ls_dd07t> TYPE dd07t.

  REFRESH ct_dom_value.
  SELECT * FROM dd07t INTO TABLE lt_dd07t
      WHERE domname = i_domname
      AND ddlanguage = sy-langu
      AND as4local = 'A'
      ORDER BY domvalue_l DESCENDING.
  LOOP AT lt_dd07t ASSIGNING <ls_dd07t>.
    ls_dom_value-text = <ls_dd07t>-ddtext.
    ls_dom_value-value = <ls_dd07t>-domvalue_l.
    APPEND ls_dom_value TO ct_dom_value.
  ENDLOOP.
ENDFORM.                    "get_dom_value_texts


*-----------------------------------------------------------------------
* get_dtel_text
*-----------------------------------------------------------------------
FORM get_dtel_text
  USING
    value(i_rollname) TYPE rollname
    value(i_field) TYPE c
  CHANGING
    c_text TYPE any.

  DATA:
  ls_dd04t TYPE dd04t,
  l_field TYPE fieldname.

  FIELD-SYMBOLS:
  <l_text> TYPE ANY.

  CLEAR c_text.
  CASE i_field.
    WHEN 'D'.
      l_field = 'DDTEXT'.
    WHEN 'T'.
      l_field = 'REPTEXT'.
    WHEN 'S'.
      l_field = 'SCRTEXT_S'.
    WHEN 'M'.
      l_field = 'SCRTEXT_M'.
    WHEN 'L'.
      l_field = 'SCRTEXT_L'.
    WHEN OTHERS.
      l_field = 'SCRTEXT_M'.
  ENDCASE.
  SELECT SINGLE * FROM dd04t INTO ls_dd04t
      WHERE rollname = i_rollname
      AND ddlanguage = sy-langu
      AND as4local = 'A'.
  IF sy-subrc = 0.
    ASSIGN COMPONENT l_field OF STRUCTURE ls_dd04t TO <l_text>.
    IF <l_text> IS ASSIGNED.
      c_text = <l_text>.
    ENDIF.
  ENDIF.
ENDFORM.                    "get_dtel_text


*-----------------------------------------------------------------------
* get_fuba_exists
*-----------------------------------------------------------------------
FORM get_fuba_exists
  USING
    value(i_funcname) TYPE rs38l_fnam
  CHANGING
    c_fuba_exists TYPE flag.

  DATA:
  l_funcname TYPE rs38l_fnam.

  c_fuba_exists = abap_false.
  SELECT SINGLE funcname FROM tfdir INTO l_funcname
    WHERE funcname = i_funcname.
  IF sy-subrc = 0.
    c_fuba_exists = abap_true.
  ENDIF.

ENDFORM.                    "get_class_exists


*-----------------------------------------------------------------------
* get_GUI_kind
*-----------------------------------------------------------------------
FORM get_gui_kind
  USING
    value(i_kind) TYPE c
  CHANGING
    c_gui_kind TYPE string.

  DATA l_kind.
  CLEAR c_gui_kind.
  l_kind = i_kind.
  TRANSLATE l_kind TO UPPER CASE.
  CASE l_kind.
    WHEN 'P'.
      c_gui_kind = txt_parameters.
    WHEN 'S'.
      c_gui_kind = txt_selection_criteria.
    WHEN OTHERS.
      c_gui_kind = l_kind.
  ENDCASE.
ENDFORM.                    "get_GUI_kind


*-----------------------------------------------------------------------
* get_GUI_operator
*-----------------------------------------------------------------------
FORM get_gui_operator
  USING
    value(i_operator) TYPE char2
  CHANGING
    c_gui_operator TYPE string.

  DATA l_operator(2) TYPE c.
  CLEAR c_gui_operator.
  l_operator = i_operator.
  TRANSLATE l_operator TO UPPER CASE.
  CASE l_operator.
    WHEN 'BT'.
      c_gui_operator = '[]'.
    WHEN 'CP'.
      c_gui_operator = '[*]'.
    WHEN 'EQ'.
      c_gui_operator = '='.
    WHEN 'GE'.
      c_gui_operator = '>='.
    WHEN 'GT'.
      c_gui_operator = '>'.
    WHEN 'LE'.
      c_gui_operator = '<='.
    WHEN 'LK'.
      c_gui_operator = 'like'.
    WHEN 'LT'.
      c_gui_operator = '<'.
    WHEN 'NB'.
      c_gui_operator = ']['.
    WHEN 'NE'.
      c_gui_operator = '<>'.
    WHEN 'NP'.
      c_gui_operator = ']*['.
    WHEN OTHERS.
      c_gui_operator = l_operator.
  ENDCASE.
ENDFORM.                    "get_GUI_operator


*-----------------------------------------------------------------------
* get_GUI_sign
*-----------------------------------------------------------------------
FORM get_gui_sign
  USING
    value(i_sign) TYPE c
  CHANGING
    c_gui_sign TYPE string.

  DATA l_sign.
  CLEAR c_gui_sign.
  l_sign = i_sign.
  TRANSLATE l_sign TO UPPER CASE.
  CASE l_sign.
    WHEN 'E'.
      c_gui_sign = txt_exclusive.
    WHEN 'I'.
      c_gui_sign = txt_inclusive.
    WHEN OTHERS.
      c_gui_sign = l_sign.
  ENDCASE.
ENDFORM.                    "get_GUI_sign


*-----------------------------------------------------------------------
* get_hardwarekey
*-----------------------------------------------------------------------
FORM get_hardwarekey
  CHANGING
    c_hwkey TYPE custkey_t.

  DATA:
  l_rc TYPE sysubrc.

  CALL FUNCTION 'SLIC_LOCAL_HWKEY'
    EXPORTING
      no_raise = 1
    IMPORTING
      hwkey    = c_hwkey
      rc       = l_rc.
ENDFORM.                    "get_hardwarekey


*-----------------------------------------------------------------------
* get_icon_text
*-----------------------------------------------------------------------
FORM get_icon_text
  USING
    value(i_icon_id) TYPE icon_d
    value(i_field) TYPE c
  CHANGING
    c_text TYPE any.

  DATA:
  ls_icont TYPE icont,
  l_field TYPE fieldname.

  FIELD-SYMBOLS:
  <l_text> TYPE ANY.

  CLEAR c_text.
  CASE i_field.
    WHEN 'S'.
      l_field = 'SHORTTEXT'.
    WHEN 'Q'.
      l_field = 'QUICKINFO'.
    WHEN OTHERS.
      l_field = 'SHORTTEXT'.
  ENDCASE.
  SELECT SINGLE * FROM icont INTO ls_icont
      WHERE id = i_icon_id
      AND langu = sy-langu.
  IF sy-subrc = 0.
    ASSIGN COMPONENT l_field OF STRUCTURE ls_icont TO <l_text>.
    IF <l_text> IS ASSIGNED.
      c_text = <l_text>.
    ENDIF.
  ENDIF.
ENDFORM.                    "get_icon_text


*-----------------------------------------------------------------------
* get_id
*-----------------------------------------------------------------------
FORM get_id
  USING
    value(i_param_1)
    value(i_param_2)
  CHANGING
    c_id.

  CONCATENATE i_param_1 i_param_2 INTO c_id.

  PERFORM replace_all
    USING '/' '_'
    CHANGING c_id.
ENDFORM.                    "get_id


*-----------------------------------------------------------------------
* get_message_text
*-----------------------------------------------------------------------
FORM get_message_text
  USING
    value(i_arbgb) TYPE any
    value(i_msgnr) TYPE any
    value(i_v1) TYPE any
    value(i_v2) TYPE any
    value(i_v3) TYPE any
    value(i_v4) TYPE any
  CHANGING
    c_text TYPE string.

  DATA:
  l_id TYPE bapiret2-id,
  l_number TYPE bapiret2-number,
  l_v1 TYPE bapiret2-message_v1,
  l_v2 TYPE bapiret2-message_v2,
  l_v3 TYPE bapiret2-message_v3,
  l_v4 TYPE bapiret2-message_v4,
  l_message TYPE bapiret2-message,
  lt_return TYPE bapiret2,
  lt_text TYPE STANDARD TABLE OF bapitgb.

  l_id = i_arbgb.
  l_number = i_msgnr.
  l_v1 = i_v1.
  l_v2 = i_v2.
  l_v3 = i_v3.
  l_v4 = i_v4.

  CALL FUNCTION 'BAPI_MESSAGE_GETDETAIL'
    EXPORTING
      id         = l_id
      number     = l_number
      language   = sy-langu
      textformat = 'ASC'
      message_v1 = l_v1
      message_v2 = l_v2
      message_v3 = l_v3
      message_v4 = l_v4
    IMPORTING
      message    = l_message
      return     = lt_return
    TABLES
      text       = lt_text.

  c_text = l_message.

ENDFORM.                    "get_message_text


*-----------------------------------------------------------------------
* get_page_title
*-----------------------------------------------------------------------
FORM get_page_title
  USING
    value(i_prefix) TYPE any
    value(i_arbgb) TYPE any
    value(i_msgnr) TYPE any
    value(i_obj_name) TYPE any
  CHANGING
    c_page_title TYPE char255.

  DATA:
  l_text TYPE string,
  l_prefix TYPE string.

  PERFORM get_message_text
    USING
      i_arbgb
      i_msgnr
      i_obj_name
      space
      space
      space
    CHANGING
      l_text.

  IF NOT i_prefix IS INITIAL.
    CONCATENATE i_prefix ':' INTO l_prefix.
    CONCATENATE l_prefix l_text INTO c_page_title SEPARATED BY space.
  ELSE.
    c_page_title = l_text.
  ENDIF.

ENDFORM.                    "get_page_title


*-----------------------------------------------------------------------
* get_props
*-----------------------------------------------------------------------
FORM get_props
  CHANGING
    ct_prop TYPE it_prop.

  DATA:
  ls_prop TYPE st_prop,
  l_hwkey TYPE custkey_t,
  l_str TYPE string,
  l_stext TYPE text40,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt.

  REFRESH ct_prop.

* version
  ls_prop-name = 'scver'.
  ls_prop-value = gc_version.
  APPEND ls_prop TO ct_prop.
* hardwarekey
  ls_prop-name = 'hwkey'.
  PERFORM get_hardwarekey
    CHANGING l_hwkey.
  ls_prop-value = l_hwkey.
  APPEND ls_prop TO ct_prop.
* component version
  ls_prop-name = 'compo'.
  SELECT SINGLE stext FROM cvers_txt INTO l_stext
    WHERE langu = 'EN'.
  IF sy-subrc <> 0.
    SELECT SINGLE stext FROM cvers_txt INTO l_stext.
  ENDIF.
  ls_prop-value = l_stext.
  APPEND ls_prop TO ct_prop.
* kernel release
  ls_prop-name = 'krel'.
  PERFORM get_version_info
    USING 'kernel release'
    CHANGING l_str.
  ls_prop-value = l_str.
  APPEND ls_prop TO ct_prop.
* patch level
  ls_prop-name = 'patch'.
  PERFORM get_version_info
    USING 'kernel patch level'
    CHANGING l_str.
  ls_prop-value = l_str.
  APPEND ls_prop TO ct_prop.
* username
  ls_prop-name = 'uname'.
  ls_prop-value = sy-uname.
  APPEND ls_prop TO ct_prop.
* language
  ls_prop-name = 'langu'.
  PERFORM get_spras USING sy-langu l_laiso l_sptxt.
  ls_prop-value = l_laiso.
  APPEND ls_prop TO ct_prop.
* date
  ls_prop-name = 'datum'.
  ls_prop-value = sy-datum.
  APPEND ls_prop TO ct_prop.
* time
  ls_prop-name = 'uzeit'.
  ls_prop-value = sy-uzeit.
  APPEND ls_prop TO ct_prop.

ENDFORM.                    "get_props


*-----------------------------------------------------------------------
* get_spras
*-----------------------------------------------------------------------
FORM get_spras
  USING
    value(i_spras) TYPE any
  CHANGING
    c_laiso TYPE laiso
    c_sptxt TYPE sptxt.

  DATA:
  l_spras TYPE spras,
  l_spraslen TYPE i.

  CLEAR:
  c_laiso,
  c_sptxt.

  l_spraslen = strlen( i_spras ).
  IF l_spraslen = 2.
    c_laiso = i_spras.
    SELECT SINGLE spras FROM t002 INTO l_spras
        WHERE spras = i_spras.
  ELSE.
    l_spras = i_spras.
    SELECT SINGLE laiso FROM t002 INTO c_laiso
        WHERE spras = i_spras.
  ENDIF.

  SELECT SINGLE sptxt FROM t002t INTO c_sptxt
      WHERE spras = l_spras
      AND sprsl = sy-langu.
ENDFORM.                    "get_spras


*-----------------------------------------------------------------------
* get_tabstrip
*-----------------------------------------------------------------------
FORM get_tabstrip
  USING
    value(i_form) TYPE fieldname
    value(i_comp_value) TYPE any
  CHANGING
    ct_tabstrip TYPE it_tabstrip.

  FIELD-SYMBOLS:
  <ls_tabstrip> TYPE st_tabstrip.

  REFRESH ct_tabstrip.

  LOOP AT gt_tabstrip ASSIGNING <ls_tabstrip>
      WHERE form = i_form.
    IF NOT <ls_tabstrip>-comparator IS INITIAL.
      CASE <ls_tabstrip>-comparator.
        WHEN 'CO'.
          IF NOT i_comp_value CO <ls_tabstrip>-comp_value.
            CONTINUE.
          ENDIF.
      ENDCASE.
    ENDIF.
    APPEND <ls_tabstrip> TO ct_tabstrip.
  ENDLOOP.
  SORT ct_tabstrip BY tab_nr.

ENDFORM.                    "get_tabstrip


*-----------------------------------------------------------------------
* get_tabstrip_defined
*-----------------------------------------------------------------------
FORM get_tabstrip_defined
  USING
    it_tabstrip TYPE it_tabstrip
  CHANGING
    ct_tabstrip TYPE it_tabstrip.

  DATA:
  ls_tabstrip TYPE st_tabstrip,
  l_parent_id(100) TYPE c VALUE '#'.

  FIELD-SYMBOLS:
  <ls_tabstrip> TYPE st_tabstrip.

*opening status
  LOOP AT it_tabstrip INTO ls_tabstrip.
    IF ls_tabstrip-empty = abap_true.
      CASE g_empty_tab.
        WHEN gc_empty_tab_disable.
          ls_tabstrip-disabled = abap_true.
          APPEND ls_tabstrip TO ct_tabstrip.
        WHEN gc_empty_tab_display.
          APPEND ls_tabstrip TO ct_tabstrip.
        WHEN gc_empty_tab_hide.
          " do nothing
      ENDCASE.
    ELSE.
      APPEND ls_tabstrip TO ct_tabstrip.
    ENDIF.
  ENDLOOP.
*active tabs
  SORT ct_tabstrip BY parent_id active_order.
  LOOP AT ct_tabstrip ASSIGNING <ls_tabstrip>
      WHERE active_order > 0
      AND disabled = abap_false
      AND hidden = abap_false
      AND empty = abap_false.
    IF l_parent_id = <ls_tabstrip>-parent_id.
      CONTINUE.
    ENDIF.
    l_parent_id = <ls_tabstrip>-parent_id.
    <ls_tabstrip>-active = abap_true.
  ENDLOOP.
  SORT ct_tabstrip BY tab_nr.

ENDFORM.                    "get_tabstrip_defined


*-----------------------------------------------------------------------
* get_time
*-----------------------------------------------------------------------
FORM get_time
  USING
    value(i_time) TYPE sytime
  CHANGING
    c_time TYPE string.

  CONCATENATE i_time+0(2) ':' i_time+2(2) ':' i_time+4(2)
  INTO c_time.
ENDFORM.                    "get_time


*-----------------------------------------------------------------------
* get_trdir_name
*-----------------------------------------------------------------------
FORM get_trdir_name
  USING
    value(i_name) TYPE any
    value(i_type) TYPE char10
  CHANGING
    c_programm TYPE programm.

  DATA:
  l_len TYPE i,
  l_diff TYPE i.

  CONSTANTS:
  lc_eqlen TYPE i VALUE 30.

  c_programm = i_name.
  l_len = strlen( c_programm ).
  l_diff = lc_eqlen - l_len.
  DO l_diff TIMES.
    CONCATENATE c_programm '=' INTO c_programm.
  ENDDO.
  CONCATENATE c_programm i_type INTO c_programm.

ENDFORM.                    "get_trdir_name


*-----------------------------------------------------------------------
* get_trdir_name_method_include
*-----------------------------------------------------------------------
FORM get_trdir_name_method_include
  USING
    value(i_mtdkey) TYPE seocpdkey
  CHANGING
    c_programm TYPE program.

  DATA:
  l_index TYPE seomtdindx,
  l_num TYPE i,
  l_hex TYPE string,
  l_hex_index(3) TYPE c,
  l_type TYPE char10,
  l_len TYPE i.

  CLEAR c_programm.
  SELECT SINGLE methodindx FROM tmdir INTO l_index
    WHERE classname = i_mtdkey-clsname
    AND methodname = i_mtdkey-cpdname.
  IF sy-subrc = 0.
    l_num = l_index.
    PERFORM number_to_x_string
      USING l_num 36
      CHANGING l_hex.
    l_hex_index = l_hex.
    DO.
      l_len = strlen( l_hex_index ).
      IF l_len < 3.
        CONCATENATE '0' l_hex_index INTO l_hex_index.
      ELSE.
        EXIT.
      ENDIF.
    ENDDO.
    CONCATENATE 'CM' l_hex_index INTO l_type.
    PERFORM get_trdir_name
      USING i_mtdkey-clsname l_type
      CHANGING c_programm.
  ENDIF.
ENDFORM.                    "get_trdir_name_method_include


*-----------------------------------------------------------------------
* get_unpacked
*-----------------------------------------------------------------------
FORM get_unpacked
  USING
    value(i_number) TYPE any
  CHANGING
    c_str TYPE string.

  DATA:
  l_strlen TYPE i.

  c_str = i_number.
  CONDENSE c_str NO-GAPS.
  SHIFT c_str LEFT DELETING LEADING '0'.
  l_strlen = strlen( i_number ).
  IF c_str IS INITIAL AND l_strlen > 0.
    c_str = '0'.
  ENDIF.
ENDFORM.                    "get_unpacked


*-----------------------------------------------------------------------
* get_user
*-----------------------------------------------------------------------
FORM get_user
  USING
    value(i_bname) TYPE xubname
  CHANGING
    c_name_text TYPE ad_namtext.

  DATA:
  lt_adrp TYPE STANDARD TABLE OF adrp,
  l_persnumber TYPE ad_persnum.

  FIELD-SYMBOLS:
  <ls_adrp> TYPE adrp.

  CLEAR c_name_text.
  SELECT SINGLE persnumber FROM usr21 INTO l_persnumber
      WHERE bname = i_bname.
  SELECT * FROM adrp INTO TABLE lt_adrp
      WHERE persnumber = l_persnumber
      ORDER BY date_from DESCENDING.
  LOOP AT lt_adrp ASSIGNING <ls_adrp>.
    c_name_text = <ls_adrp>-name_text.
    IF NOT c_name_text IS INITIAL.
      EXIT.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "get_user


*-----------------------------------------------------------------------
* get_version_info
*-----------------------------------------------------------------------
FORM get_version_info
  USING
    value(i_type) TYPE any
  CHANGING
    c_value TYPE string.

  DATA:
  l_index TYPE i,
  lt_version_info TYPE it_version_info.

  FIELD-SYMBOLS:
  <ls_version_info> TYPE st_version_info.

  CLEAR c_value.

  CASE i_type.
    WHEN 'SAP version'.           l_index =  1.
    WHEN 'operating system'.      l_index =  2.
    WHEN 'machine type'.          l_index =  3.
    WHEN 'node name'.             l_index =  4.
    WHEN 'SAP system id'.         l_index =  5.
    WHEN 'database system'.       l_index =  6.
    WHEN 'database name'.         l_index =  7.
    WHEN 'database host'.         l_index =  8.
    WHEN 'database owner'.        l_index =  9.
    WHEN 'rsyn'.                  l_index = 10.
    WHEN 'IP address'.            l_index = 11.
    WHEN 'kernel release'.        l_index = 12.
    WHEN 'database library'.      l_index = 13.
    WHEN 'kernel compiled'.       l_index = 14.
    WHEN 'kernel patch level'.    l_index = 15.
    WHEN 'supported SAP vers.'.   l_index = 16.
    WHEN 'supported database'.    l_index = 17.
    WHEN 'valid OP system'.       l_index = 18.
    WHEN 'OP system release'.     l_index = 19.
    WHEN 'ABAP load version'.     l_index = 20.
    WHEN 'CUA load version'.      l_index = 21.
    WHEN 'kernel kind'.           l_index = 22.
  ENDCASE.

  CALL 'SAPCORE' ID 'ID' FIELD 'VERSION'
                 ID 'TABLE' FIELD lt_version_info.
  READ TABLE lt_version_info ASSIGNING <ls_version_info>
    WITH KEY type = i_type.
  IF sy-subrc <> 0 AND l_index > 0.
    READ TABLE lt_version_info ASSIGNING <ls_version_info>
      INDEX l_index.
  ENDIF.
  IF sy-subrc = 0 AND <ls_version_info> IS ASSIGNED.
    c_value = <ls_version_info>-value.

    CASE i_type.
      WHEN 'database system'.
        IF c_value(3) = 'ADA'.
          c_value = 'SAP DB'.
        ENDIF.
    ENDCASE.
  ENDIF.
ENDFORM.                    "get_version_info
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_HTML_ADD                               *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* form: html_add_attributes_1
*-----------------------------------------------------------------------
FORM html_add_attributes_1
  USING
    is_attributes TYPE st_attributes
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  PERFORM html_add_attributes_1nodiv
    USING
      is_attributes
    CHANGING
      ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_attributes_1


*-----------------------------------------------------------------------
* form: html_add_attributes_1NoDiv
*-----------------------------------------------------------------------
FORM html_add_attributes_1nodiv
  USING
    is_attributes TYPE st_attributes
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_name_text TYPE char255,
  l_bname TYPE char255,
  l_date_last_changed TYPE char255,
  l_devclass TYPE char255,
  l_devclass_descr TYPE char255,
  l_laiso TYPE char255,
  l_sptxt TYPE char255,
  l_checked TYPE string.

  WRITE is_attributes-name_text TO l_name_text.
  WRITE is_attributes-bname TO l_bname.
  WRITE is_attributes-date_last_changed TO l_date_last_changed.
  WRITE is_attributes-devclass TO l_devclass.
  WRITE is_attributes-devclass_descr TO l_devclass_descr.
  WRITE is_attributes-laiso TO l_laiso.
  WRITE is_attributes-sptxt TO l_sptxt.

  CONCATENATE
      '<table class="titleTable">'
        '<tr>'
          '<td class="titleTableText">' txt_last_changed_on_by '</td>'
          '<td class="titleTableDescr" colspan="2">'
            '<a href="#" onclick="return false;"'
            ' title="' l_name_text '">'
              l_bname
            '</a>'
          '</td>'
          '<td class="titleTableDescr">'
            l_date_last_changed
          '</td>'
          '<td>&#160;</td>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">' txt_package '</td>'
          '<td class="titleTableDescr" colspan="4">'
            l_devclass
          '</td>'
          '<td>' l_devclass_descr '</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">' txt_original_language '</td>'
          '<td class="titleTableDescr">'
            l_laiso
          '</td>'
          '<td colspan="4">'
            l_sptxt
          '</td>'
        '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  IF is_attributes-display_rfcenable = abap_true.
    CLEAR l_checked.
    IF is_attributes-rfcenable = abap_true.
      l_checked = ' checked="checked"'.
    ENDIF.
    CONCATENATE
        '<tr><td colspan="6">&#160;</td></tr>'
        '<tr><td colspan="6">&#160;</td></tr>'
        '<tr>'
          '<td colspan="6">'
            '<table>'
              '<tr>'
                '<td>'
                  '<input class="innerTableFlag"'
                  l_checked
                  ' disabled="disabled" type="checkbox"'
                  ' value="' is_attributes-rfcenable '"/>'
                '</td>'
                '<td>' txt_allow_rfc '</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  IF is_attributes-display_appview = abap_true.
    CONCATENATE
        '<tr><td colspan="6">&#160;</td></tr>'
        '<tr><td colspan="6">&#160;</td></tr>'
        '<tr>'
          '<td class="titleTableText">' txt_appending_view '</td>'
          '<td class="titleTableDescr" colspan="4">'
            is_attributes-appview
          '</td>'
          '<td>&#160;</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  APPEND '</table>' TO ct_html.

ENDFORM.                    "html_add_attributes_1NoDiv


*-----------------------------------------------------------------------
* form: html_add_attributes_2
*-----------------------------------------------------------------------
FORM html_add_attributes_2
  USING
    is_attributes TYPE st_attributes
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_descript TYPE char255,
  l_author TYPE char255,
  l_author_text TYPE char255,
  l_date_created TYPE char255,
  l_bname TYPE char255,
  l_name_text TYPE char255,
  l_date_last_changed TYPE char255,
  l_devclass TYPE char255,
  l_devclass_descr TYPE char255,
  l_laiso TYPE char255,
  l_sptxt TYPE char255,
  l_internal_name TYPE char255,
  l_initial_bsp TYPE char255,
  l_application_class TYPE char255,
  l_theme TYPE char255,
  l_checked TYPE string.

  WRITE is_attributes-descript TO l_descript.
  WRITE is_attributes-author TO l_author.
  WRITE is_attributes-author_text TO l_author_text.
  WRITE is_attributes-date_created TO l_date_created.
  WRITE is_attributes-bname TO l_bname.
  WRITE is_attributes-name_text TO l_name_text.
  WRITE is_attributes-date_last_changed TO l_date_last_changed.
  WRITE is_attributes-devclass TO l_devclass.
  WRITE is_attributes-devclass_descr TO l_devclass_descr.
  WRITE is_attributes-laiso TO l_laiso.
  WRITE is_attributes-sptxt TO l_sptxt.
  WRITE is_attributes-internal_name TO l_internal_name.
  WRITE is_attributes-initial_bsp TO l_initial_bsp.
  WRITE is_attributes-application_class TO l_application_class.
  WRITE is_attributes-theme TO l_theme.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table class="titleTable">'
        '<tr>'
          '<td class="titleTableText">'
            txt_short_description___2
          '</td>'
          '<td class="titleTableDescr" colspan="7">' l_descript '</td>'
        '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  IF is_attributes-space_after_descript = abap_true.
    CONCATENATE
        '<tr>'
          '<td colspan="8">&#160;</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  CONCATENATE
        '<tr>'
          '<td class="titleTableText">' txt_created_by___2 '</td>'
          '<td class="titleTableDescr" colspan="2">'
            '<a href="#" onclick="return false;"'
            ' title="' l_author_text '">'
              l_author
            '</a>'
          '</td>'
          '<td>&#160;</td>'
          '<td class="titleTableText" colspan="2">'
            txt_created_on
          '</td>'
          '<td class="titleTableDescr">' l_date_created '</td>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">' txt_last_changed_by___2 '</td>'
          '<td class="titleTableDescr" colspan="2">'
            '<a href="#" onclick="return false;"'
            ' title="' l_name_text '">'
              l_bname
            '</a>'
          '</td>'
          '<td>&#160;</td>'
          '<td class="titleTableText" colspan="2">'
            txt_changed_on
          '</td>'
          '<td class="titleTableDescr">' l_date_last_changed '</td>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">' txt_package '</td>'
          '<td class="titleTableDescr" colspan="4">'
            '<a href="#" onclick="return false;"'
            ' title="' l_devclass_descr '">'
              l_devclass
            '</a>'
          '</td>'
          '<td colspan="3">&#160;</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">' txt_original_language '</td>'
          '<td class="titleTableDescr" colspan="1">'
            '<a href="#" onclick="return false;"'
            ' title="' l_sptxt '">'
              l_laiso
            '</a>'
          '</td>'
          '<td colspan="6">&#160;</td>'
        '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  IF is_attributes-is_bsp_appl = abap_true.
    CONCATENATE
        '<tr>'
          '<td class="titleTableText">' txt_internal_name '</td>'
          '<td class="titleTableDescr" colspan="4">'
            l_internal_name
          '</td>'
          '<td colspan="3">&#160;</td>'
        '</tr>'
        '<tr>'
          '<td colspan="8">&#160;</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">'
            txt_initial_bsp
          '</td>'
          '<td class="titleTableDescr" colspan="7">'
            l_initial_bsp
          '</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">' txt_application_class '</td>'
          '<td class="titleTableDescr" colspan="4">'
            l_application_class
          '</td>'
          '<td colspan="3">&#160;</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">' txt_theme '</td>'
          '<td class="titleTableDescr" colspan="4">'
            l_theme
          '</td>'
          '<td colspan="3">&#160;</td>'
        '</tr>'
        '<tr>'
          '<td colspan="8">'
            '<table>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
    CLEAR l_checked.
    IF is_attributes-stateful = abap_true.
      l_checked = ' checked="checked"'.
    ENDIF.
    CONCATENATE
              '<tr>'
                '<td>'
                  '<input class="innerTableFlag"'
                  l_checked
                  ' disabled="disabled" type="checkbox"'
                  ' value="' is_attributes-stateful '"/>'
                '</td>'
                '<td>' txt_stateful '</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
    CLEAR l_checked.
    IF is_attributes-supports_portal_integration = abap_true.
      l_checked = ' checked="checked"'.
    ENDIF.
    CONCATENATE
              '<tr>'
                '<td>'
                  '<input class="innerTableFlag"'
                  l_checked
                  ' disabled="disabled" type="checkbox"'
                  ' value="' is_attributes-supports_portal_integration
                  '"/>'
                '</td>'
                '<td>' txt_supports_portal_integratio '</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  IF is_attributes-display_rfcenable = abap_true.
    CLEAR l_checked.
    IF is_attributes-rfcenable = abap_true.
      l_checked = ' checked="checked"'.
    ENDIF.
    CONCATENATE
        '<tr><td colspan="8">&#160;</td></tr>'
        '<tr><td colspan="8">&#160;</td></tr>'
        '<tr>'
          '<td colspan="8">'
            '<table>'
              '<tr>'
                '<td>'
                  '<input class="innerTableFlag"'
                  l_checked
                  ' disabled="disabled" type="checkbox"'
                  ' value="' is_attributes-rfcenable '"/>'
                '</td>'
                '<td>' txt_allow_rfc '</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  APPEND '</table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_attributes_2


*-----------------------------------------------------------------------
* form: html_add_attributes_3
*-----------------------------------------------------------------------
FORM html_add_attributes_3
  USING
    is_attributes TYPE st_attributes
    value(i_title_ml)
    value(i_name_ml)
    it_accessmode_ml TYPE it_access
    value(i_title_mr)
    it_ti_mr TYPE it_textinput
    value(i_title_u)
    it_ti_u TYPE it_textinput
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_descript TYPE char255,
  l_devclass TYPE char255,
  l_devclass_descr TYPE char255,
  l_laiso TYPE char255,
  l_sptxt TYPE char255,
  l_date_last_changed TYPE char255,
  l_time_last_changed TYPE char255,
  l_date_last_generation TYPE char255,
  l_time_last_generation TYPE char255.

  WRITE is_attributes-descript TO l_descript.
  WRITE is_attributes-devclass TO l_devclass.
  WRITE is_attributes-devclass_descr TO l_devclass_descr.
  WRITE is_attributes-laiso TO l_laiso.
  WRITE is_attributes-sptxt TO l_sptxt.
  WRITE is_attributes-date_last_changed TO l_date_last_changed.
  WRITE is_attributes-time_last_changed TO l_time_last_changed.
  WRITE is_attributes-date_last_generation TO l_date_last_generation.
  WRITE is_attributes-time_last_generation TO l_time_last_generation.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td colspan="3">'
            '<table>'
              '<tr>'
                '<td class="titleTableText">'
                  txt_short_description___1
                '</td>'
                '<td class="titleTableDescr" colspan="7">'
                  l_descript
                '</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText">'
                  txt_original_language
                '</td>'
                '<td class="titleTableDescr">' l_laiso '</td>'
                '<td colspan="4">' l_sptxt '</td>'
                '<td class="titleTableText">' txt_package '</td>'
                '<td class="titleTableDescr">'
                  '<a href="#" onclick="return false;"'
                  ' title="' l_devclass_descr '">'
                    l_devclass
                  '</a>'
                '</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText">'
                  txt_last_changed_on_by
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  l_date_last_changed
                '</td>'
                '<td>&#160;</td>'
                '<td class="titleTableDescr">'
                  l_time_last_changed
                '</td>'
                '<td>&#160;</td>'
                '<td colspan="2">&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText">'
                  txt_last_generation
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  l_date_last_generation
                '</td>'
                '<td>&#160;</td>'
                '<td class="titleTableDescr">'
                  l_time_last_generation
                '</td>'
                '<td>&#160;</td>'
                '<td colspan="2">&#160;</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
        '<tr><td colspan="3">&#160;</td></tr>'
        '<tr>'
          '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_radiobuttonsnodiv
    USING
      i_title_ml
      i_name_ml
      it_accessmode_ml
    CHANGING
      ct_html.

  APPEND '</td><td>&#160;</td><td style="vertical-align:top">'
      TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_mr
      it_ti_mr
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_u
      it_ti_u
    CHANGING
      ct_html.

  APPEND '</td></tr></table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_attributes_3


*-----------------------------------------------------------------------
* form: html_add_attributes_4
*-----------------------------------------------------------------------
FORM html_add_attributes_4
  USING
    is_attributes TYPE st_attributes
    value(i_title_m)
    it_ti_m TYPE it_textinput
    value(i_title_u)
    it_ti_u TYPE it_textinput
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_descript TYPE char255,
  l_person_responsible TYPE char255,
  l_person_responsible_descr TYPE char255,
  l_created_by TYPE char255,
  l_created_by_descr TYPE char255,
  l_created_on TYPE char255,
  l_last_changed_by TYPE char255,
  l_last_changed_by_descr TYPE char255,
  l_changed_on TYPE char255,
  l_application_component TYPE char255.

  WRITE is_attributes-descript TO l_descript.
  WRITE is_attributes-person_responsible TO l_person_responsible.
  WRITE is_attributes-person_responsible_text
      TO l_person_responsible_descr.
  WRITE is_attributes-author TO l_created_by.
  WRITE is_attributes-author_text TO l_created_by_descr.
  WRITE is_attributes-date_created TO l_created_on.
  WRITE is_attributes-bname TO l_last_changed_by.
  WRITE is_attributes-name_text TO l_last_changed_by_descr.
  WRITE is_attributes-date_last_changed TO l_changed_on.
  WRITE is_attributes-application_component
      TO l_application_component.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td colspan="3">'
            '<table>'
              '<tr>'
                '<td class="titleTableText">'
                  txt_short_description___1
                '</td>'
                '<td class="titleTableDescr" colspan="6">'
                  l_descript
                '</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText">'
                  txt_person_responsible___2
                '</td>'
                '<td class="titleTableDescr">'
                  '<a href="#" onclick="return false;"'
                  ' title="' l_person_responsible_descr '">'
                    l_person_responsible
                  '</a>'
                '</td>'
                '<td colspan="5">&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText">' txt_created_by___2 '</td>'
                '<td class="titleTableDescr">'
                  '<a href="#" onclick="return false;"'
                  ' title="' l_created_by_descr '">'
                    l_created_by
                  '</a>'
                '</td>'
                '<td>&#160;</td>'
                '<td class="titleTableText" colspan="2">'
                  txt_created_on
                '</td>'
                '<td class="titleTableDescr">'
                  l_created_on
                '</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText">'
                  txt_last_changed_by___2
                '</td>'
                '<td class="titleTableDescr">'
                  '<a href="#" onclick="return false;"'
                  ' title="' l_last_changed_by_descr '">'
                    l_last_changed_by
                  '</a>'
                '</td>'
                '<td>&#160;</td>'
                '<td class="titleTableText" colspan="2">'
                  txt_changed_on
                '</td>'
                '<td class="titleTableDescr">'
                  l_changed_on
                '</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText">'
                  txt_application_component
                '</td>'
                '<td class="titleTableDescr" colspan="3">'
                  l_application_component
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
        '<tr><td>&#160;</td></tr>'
        '<tr>'
          '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_m
      it_ti_m
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_u
      it_ti_u
    CHANGING
      ct_html.

  APPEND '</td></tr></table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_attributes_4


*-----------------------------------------------------------------------
* form: html_add_box_begin
*-----------------------------------------------------------------------
FORM html_add_box_begin
  USING
    value(i_title)
    value(i_colspan)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_colspan TYPE num1,
  l_str TYPE string VALUE '',
  ls_html TYPE string.

  l_colspan = i_colspan.
  IF i_colspan > 1.
    CONCATENATE ' colspan="' l_colspan '"' INTO l_str.
  ENDIF.

  CONCATENATE
      '<table border="0" cellpadding="0" cellspacing="0" class="box">'
        '<tr class="boxContent">'
          '<td class="boxContent"' l_str '>'
            '<table class="boxName">'
              '<tr>'
                '<td>'
                  '<span>' i_title '</span>'
                '</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
        '<tr class="boxContent">'
          '<td class="boxContent">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "html_add_box_begin


*-----------------------------------------------------------------------
* form: html_add_box_end
*-----------------------------------------------------------------------
FORM html_add_box_end
  CHANGING
    ct_html TYPE it_string.

  APPEND '</td></tr></table>' TO ct_html.

ENDFORM.                    "html_add_box_end


*-----------------------------------------------------------------------
* form: html_add_box1RB_1TIhornodiv
*-----------------------------------------------------------------------
FORM html_add_box1rb_1tihornodiv
  USING
    value(i_title)
    it_accessmode TYPE it_access
    it_ti TYPE it_textinput
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_box_begin
    USING i_title '1'
    CHANGING ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_radiobuttonsnodiv
    USING
      'boxz'
      it_accessmode
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
          '<td>&#160;</td>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_textinputnodiv
    USING it_ti
    CHANGING ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

ENDFORM.                    "html_add_box1RB_1TIhornodiv


*-----------------------------------------------------------------------
* form: html_add_box1RB_1TIvernodiv
*-----------------------------------------------------------------------
FORM html_add_box1rb_1tivernodiv
  USING
    value(i_title)
    it_accessmode TYPE it_access
    it_ti TYPE it_textinput
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_box_begin
    USING i_title '1'
    CHANGING ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_radiobuttonsnodiv
    USING
      'boxx'
      it_accessmode
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_textinputnodiv
    USING it_ti
    CHANGING ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

ENDFORM.                    "html_add_box1RB_1TIvernodiv


*-----------------------------------------------------------------------
* form: html_add_box1RB_subbox2TI
*-----------------------------------------------------------------------
FORM html_add_box1rb_subbox2ti
  USING
    value(i_title)
    it_accessmode TYPE it_access
    value(i_subtitle)
    it_ti_l TYPE it_textinput
    it_ti_r TYPE it_textinput
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  PERFORM html_add_box1rb_subbox2tinodiv
    USING
      i_title
      it_accessmode
      i_subtitle
      it_ti_l
      it_ti_r
    CHANGING
      ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_box1RB_subbox2TI


*-----------------------------------------------------------------------
* form: html_add_box1RB_subbox2TInodiv
*-----------------------------------------------------------------------
FORM html_add_box1rb_subbox2tinodiv
  USING
    value(i_title)
    it_accessmode TYPE it_access
    value(i_subtitle)
    it_ti_l TYPE it_textinput
    it_ti_r TYPE it_textinput
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_box_begin
    USING i_title '1'
    CHANGING ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_radiobuttonsnodiv
    USING
      'box'
      it_accessmode
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr><td>&#160;</td></tr>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_begin
    USING i_subtitle '3'
    CHANGING ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_textinputnodiv
    USING it_ti_l
    CHANGING ct_html.

  CONCATENATE
          '</td>'
          '<td>&#160;</td>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_textinputnodiv
    USING it_ti_r
    CHANGING ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

ENDFORM.                    "html_add_box1RB_subbox2TInodiv


*-----------------------------------------------------------------------
* form: html_add_box1TI_subboxMSnodiv
*-----------------------------------------------------------------------
FORM html_add_box1ti_subboxmsnodiv
  USING
    value(i_title)
    it_ti TYPE it_textinput
    value(i_subtitle)
    value(i_step) TYPE c
    value(i_overview_screen)
    value(i_single_screen)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_int TYPE i,
  l_overview_screen TYPE string,
  l_single_screen TYPE string.

  l_int = i_overview_screen.
  l_overview_screen = l_int.
  l_int = i_single_screen.
  l_single_screen = l_int.

  PERFORM html_add_box_begin
    USING i_title '1'
    CHANGING ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_textinputnodiv
    USING it_ti
    CHANGING ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr><td>&#160;</td></tr>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_begin
    USING i_subtitle '1'
    CHANGING ct_html.

*Maintenance Screens
* one step
  CONCATENATE
      '<table>'
        '<tr>'
          '<td class="titleTableText">'
            txt_maintenance_type
          '</td>'
          '<td>'
            '<input'
      INTO ls_html.
  IF i_step = '1'.
    CONCATENATE ls_html ' checked="checked"' INTO ls_html.
  ENDIF.
  CONCATENATE
                  ls_html
                  ' class="radio"'
                  ' disabled="disabled" name="ms"'
                  ' type="radio"'
                  ' value="1"/>'
          '</td>'
          '<td>'
            '<span>' txt_one_step '</span>'
          '</td>'
          '<td>&#160;</td>'
        '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
* two step
  CONCATENATE
        '<tr>'
          '<td>&#160;</td>'
          '<td>'
            '<input'
      INTO ls_html.
  IF i_step = '2'.
    CONCATENATE ls_html ' checked="checked"' INTO ls_html.
  ENDIF.
  CONCATENATE
                  ls_html
                  ' class="radio"'
                  ' disabled="disabled" name="ms"'
                  ' type="radio"'
                  ' value="1"/>'
          '</td>'
          '<td>'
            '<span>' txt_two_step '</span>'
          '</td>'
          '<td>&#160;</td>'
        '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
* Overview screen
  CONCATENATE
        '<tr>'
          '<td class="titleTableText">'
            txt_maint_screen_no
          '</td>'
          '<td class="titleTableText" colspan="2">'
            txt_overview_screen
          '</td>'
          '<td class="titleTableDescr">'
            '<span>'
              l_overview_screen
            '</span>'
          '</td>'
        '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
* Single screen
  CONCATENATE
        '<tr>'
          '<td>&#160;</td>'
          '<td class="titleTableText" colspan="2">'
            txt_single_screen
          '</td>'
          '<td class="titleTableDescr">'
            '<span>'
              l_single_screen
            '</span>'
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

ENDFORM.                    "html_add_box1TI_subboxMSnodiv


*-----------------------------------------------------------------------
* form: html_add_box1TI_2RB_TI
*-----------------------------------------------------------------------
FORM html_add_box1ti_2rb_ti
  USING
    value(i_title_o)
    it_ti_o TYPE it_textinput
    value(i_title_ul)
    value(i_name_ul)
    it_accessmode_ul TYPE it_access
    value(i_title_ur)
    it_ti_ur TYPE it_textinput
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td colspan="3">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_o
      it_ti_o
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_radiobuttonsnodiv
    USING
      i_title_ul
      i_name_ul
      it_accessmode_ul
    CHANGING
      ct_html.

  APPEND '</td><td>&#160;</td><td style="vertical-align:top">'
      TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_ur
      it_ti_ur
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_box1TI_2RB_TI


*-----------------------------------------------------------------------
* form: html_add_box1TI_2TIverNoDiv
*-----------------------------------------------------------------------
FORM html_add_box1ti_2tivernodiv
  USING
    value(i_title_l)
    it_ti_l TYPE it_textinput
    value(i_title_ro)
    it_ti_ro TYPE it_textinput
    value(i_title_ru)
    it_ti_ru TYPE it_textinput
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td class="boxContainerTd" rowspan="3">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_l
      it_ti_l
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
          '<td class="boxContainerTd" rowspan="3">&#160;</td>'
          '<td class="boxContainerTd">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_ro
      it_ti_ro
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr><td class="boxContainerTd">&#160;</td></tr>'
        '<tr>'
          '<td class="boxContainerTd">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_ru
      it_ti_ru
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "html_add_box1TI_2TIverNoDiv


*-----------------------------------------------------------------------
* form: html_add_box1TIDbl_Box2TI_2TIx
*-----------------------------------------------------------------------
FORM html_add_box1tidbl_box2ti_2tix
  USING
    value(i_title_o)
    it_ti_ol TYPE it_textinput
    it_ti_or TYPE it_textinput
    value(i_title_m)
    value(i_title_ml)
    value(i_title_mr)
    it_ti_ml TYPE it_textinput
    it_ti_mr TYPE it_textinput
    value(i_title_ul)
    value(i_title_ur)
    it_ti_ul TYPE it_textinput
    it_ti_ur TYPE it_textinput
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td class="boxContainerTd" colspan="3">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputdblnodiv
    USING
      i_title_o
      it_ti_ol
      it_ti_or
    CHANGING
      ct_html.

  PERFORM html_add_box_begin
    USING i_title_m '5'
    CHANGING ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_ml
      it_ti_ml
    CHANGING
      ct_html.

  CONCATENATE
                '</td>'
                '<td class="boxContent">&#160;</td>'
                '<td class="boxContent">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_mr
      it_ti_mr
    CHANGING
      ct_html.

  CONCATENATE
                '</td>'
                '<td class="boxContent">&#160;&#160;</td>'
              '</tr>'
              '<tr><td class="boxContent" colspan="5">&#160;</td></tr>'
            '</table>'
          '</td>'
        '</tr>'
        '<tr><td class="boxContainerTd" colspan="3">&#160;</td></tr>'
        '<tr>'
          '<td class="boxContainerTd">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_ul
      it_ti_ul
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
          '<td class="boxContainerTd">&#160;</td>'
          '<td class="boxContainerTd">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_ur
      it_ti_ur
    CHANGING
      ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

ENDFORM.                    "html_add_box1TIDbl_Box2TI_2TIx


*-----------------------------------------------------------------------
* form: html_add_box_radioButtons
*-----------------------------------------------------------------------
FORM html_add_box_radiobuttons
  USING
    value(i_title)
    value(i_name)
    it_accessmode TYPE it_access
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  PERFORM html_add_box_radiobuttonsnodiv
    USING
      i_title
      i_name
      it_accessmode
    CHANGING
      ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_box_radioButtons


*-----------------------------------------------------------------------
* form: html_add_box_radioButtonsNoDiv
*-----------------------------------------------------------------------
FORM html_add_box_radiobuttonsnodiv
  USING
    value(i_title)
    value(i_name)
    it_accessmode TYPE it_access
  CHANGING
    ct_html TYPE it_string.

  PERFORM html_add_box_begin
    USING i_title '1'
    CHANGING ct_html.

  PERFORM html_add_radiobuttonsnodiv
    USING
      i_name
      it_accessmode
    CHANGING
      ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

ENDFORM.                    "html_add_box_radioButtonsNoDiv


*-----------------------------------------------------------------------
* form: html_add_box_textInput2Ver
*-----------------------------------------------------------------------
FORM html_add_box_textinput2ver
  USING
    value(i_title_o)
    it_ti_o TYPE it_textinput
    value(i_title_u)
    it_ti_u TYPE it_textinput
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_o
      it_ti_o
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_u
      it_ti_u
    CHANGING
      ct_html.

  APPEND '</td></tr></table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_boxTextInput2Ver


*-----------------------------------------------------------------------
* form: html_add_box_data_transport
*-----------------------------------------------------------------------
FORM html_add_box_data_transport
  USING
    value(i_title)
    value(i_recording) TYPE flag
    value(i_compare_flag) TYPE string
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_box_begin
    USING i_title '1'
    CHANGING ct_html.

*Recording routine
* Standard recording routine
  CONCATENATE
      '<table>'
        '<tr>'
          '<td class="titleTableText">'
            txt_recording_routine
          '</td>'
          '<td>'
            '<input'
      INTO ls_html.
  IF i_recording = abap_false.
    CONCATENATE ls_html ' checked="checked"' INTO ls_html.
  ENDIF.
  CONCATENATE
                  ls_html
                  ' class="radio"'
                  ' disabled="disabled" name="rr"'
                  ' type="radio"'
                  ' value="1"/>'
          '</td>'
          '<td>'
            '<span>' txt_standard_recording_routine '</span>'
          '</td>'
          '<td>&#160;</td>'
        '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
* no, or user, recording routine
  CONCATENATE
        '<tr>'
          '<td>&#160;</td>'
          '<td>'
            '<input'
      INTO ls_html.
  IF i_recording = abap_true.
    CONCATENATE ls_html ' checked="checked"' INTO ls_html.
  ENDIF.
  CONCATENATE
                  ls_html
                  ' class="radio"'
                  ' disabled="disabled" name="ms"'
                  ' type="radio"'
                  ' value="1"/>'
          '</td>'
          '<td>'
            '<span>' txt_no_or_user_recording_routi '</span>'
          '</td>'
          '<td>&#160;</td>'
        '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
* Compare Flag
  CONCATENATE
        '<tr>'
          '<td class="titleTableText">'
            txt_compare_flag
          '</td>'
          '<td class="titleTableDescr" colspan="3">'
            '<span>'
              i_compare_flag
            '</span>'
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

ENDFORM.                    "html_add_box_data_transport


*-----------------------------------------------------------------------
* form: html_add_box_textInputDblNoDiv
*-----------------------------------------------------------------------
FORM html_add_box_textinputdblnodiv
  USING
    value(i_title)
    it_ti_l TYPE it_textinput
    it_ti_r TYPE it_textinput
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_box_begin
    USING i_title '3'
    CHANGING ct_html.

  PERFORM html_add_textinputnodiv
    USING
      it_ti_l
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
          '<td>&#160;</td>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_textinputnodiv
    USING
      it_ti_r
    CHANGING
      ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

ENDFORM.                    "html_add_box_textInputDblNoDiv


*-----------------------------------------------------------------------
* form: html_add_box_textInputNoDiv
*-----------------------------------------------------------------------
FORM html_add_box_textinputnodiv
  USING
    value(i_title)
    it_ti TYPE it_textinput
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_box_begin
    USING i_title '1'
    CHANGING ct_html.

  PERFORM html_add_textinputnodiv
    USING
      it_ti
    CHANGING
      ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

ENDFORM.                    "html_add_box_textInputNoDiv


*-----------------------------------------------------------------------
* form: html_add_container_begin
*-----------------------------------------------------------------------
FORM html_add_container_begin
  USING
    it_tabstrip TYPE it_tabstrip
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  lt_tabstrip TYPE it_tabstrip,
  ls_html TYPE string,
  l_class TYPE string.

  FIELD-SYMBOLS:
  <ls_tabstrip> TYPE st_tabstrip.

  PERFORM get_tabstrip_defined
    USING it_tabstrip
    CHANGING lt_tabstrip.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td class="contentTable">'
            '<table border="0" cellpadding="0" cellspacing="0"'
            ' class="contentTable">'
              '<tr>'
        INTO ls_html.
  APPEND ls_html TO ct_html.
  LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>
    WHERE hidden = abap_false
    AND parent_id = i_id.
    IF <ls_tabstrip>-disabled = abap_true.
      l_class = 'contentTabDisabled'.
    ELSEIF <ls_tabstrip>-active = abap_true.
      l_class = 'contentTabOn'.
    ELSE.
      l_class = 'contentTabOff'.
    ENDIF.
    IF <ls_tabstrip>-disabled = abap_false.
      CONCATENATE '<td class="' l_class '" id="' <ls_tabstrip>-id
        'tab"><a href="#" onclick="openChildTab('''
        <ls_tabstrip>-parent_id ''','''
        <ls_tabstrip>-id ''')">'
        <ls_tabstrip>-text '</a></td>' INTO ls_html.
      APPEND ls_html TO ct_html.
    ELSE.
      CONCATENATE '<td class="' l_class '" id="' <ls_tabstrip>-id
        'tab"><a class="linkDisabled" href="#"'
        ' onclick="return false">'
        <ls_tabstrip>-text '</a></td>' INTO ls_html.
      APPEND ls_html TO ct_html.
    ENDIF.
  ENDLOOP.
  CONCATENATE
            '</tr>'
          '</table>'
        '</td>'
      '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  APPEND '<tr>' TO ct_html.
  APPEND '<td class="contentBox">' TO ct_html.

ENDFORM.                    "html_add_container_begin


*-----------------------------------------------------------------------
* form: html_add_container_end
*-----------------------------------------------------------------------
FORM html_add_container_end
  CHANGING
    ct_html TYPE it_string.

  APPEND '</td></tr></table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_container_end


*-----------------------------------------------------------------------
* form: html_add_data_type
*-----------------------------------------------------------------------
FORM html_add_data_type
  USING
    is_data_type TYPE st_data_type
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,

  l_checked_12 TYPE string,

  l_checked_1 TYPE string,
  l_domname_1 TYPE char255,
  l_domdescr_1 TYPE char255,
  l_datatype_1 TYPE char255,
  l_datadescr_1 TYPE char255,
  l_dataleng_1 TYPE string,
  l_datadeci_1 TYPE string,

  l_checked_2 TYPE string,
  l_datatype_2 TYPE char255,
  l_dataleng_2 TYPE string,
  l_datadeci_2 TYPE string,

  l_checked_34 TYPE string,

  l_checked_3 TYPE string,
  l_reftypename_3 TYPE string,

  l_checked_4 TYPE string,
  l_datatype_4 TYPE char255,
  l_datadescr_4 TYPE char255,
  l_dataleng_4 TYPE string,
  l_datadeci_4 TYPE string.


  CASE is_data_type-refkind.
    WHEN 'R'.
      l_checked_34 = ' checked="checked" '.
      CASE is_data_type-reftype.
        WHEN 'B'.
          l_checked_4 = ' checked="checked" '.
          WRITE is_data_type-datatype TO l_datatype_4.
          WRITE is_data_type-datadescr TO l_datadescr_4.
          PERFORM get_unpacked
            USING
              is_data_type-dataleng
            CHANGING
              l_dataleng_4.
          PERFORM get_unpacked
            USING
              is_data_type-datadeci
            CHANGING
              l_datadeci_4.
        WHEN OTHERS.
          l_checked_3 = ' checked="checked" '.
          l_reftypename_3 = is_data_type-domname.
      ENDCASE.
    WHEN 'D'.
      l_checked_12 = ' checked="checked" '.
      l_checked_1 = ' checked="checked" '.
      WRITE is_data_type-domname TO l_domname_1.
      WRITE is_data_type-domdescr TO l_domdescr_1.
      WRITE is_data_type-datatype TO l_datatype_1.
      WRITE is_data_type-datadescr TO l_datadescr_1.
      PERFORM get_unpacked
        USING
          is_data_type-dataleng
        CHANGING
          l_dataleng_1.
      PERFORM get_unpacked
        USING
          is_data_type-datadeci
        CHANGING
          l_datadeci_1.
    WHEN OTHERS.
      l_checked_12 = ' checked="checked" '.
      l_checked_2 = ' checked="checked" '.
      WRITE is_data_type-datatype TO l_datatype_2.
      PERFORM get_unpacked
        USING
          is_data_type-dataleng
        CHANGING
          l_dataleng_2.
      PERFORM get_unpacked
        USING
          is_data_type-datadeci
        CHANGING
          l_datadeci_2.
  ENDCASE.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<form action="#" method="post">'
        '<table class="titleTable">'
          '<tr>'
            '<td>'
              '<input ' l_checked_12 ' class="radio"'
              ' disabled="disabled" name="type"'
              ' type="radio" value="elementaryType"/>'
            '</td>'
            '<td colspan="2">' txt_elementary_type '</td>'
            '<td>&#160;</td>'
            '<td>&#160;</td>'
            '<td>&#160;</td>'
            '<td>&#160;</td>'
            '<td>&#160;</td>'
          '</tr>'
          '<tr>'
            '<td>&#160;</td>'
            '<td>'
              '<input ' l_checked_1 ' class="radio"'
              ' disabled="disabled" name="subtype"'
              ' type="radio" value="domain"/>'
            '</td>'
            '<td>' txt_domain '</td>'
            '<td class="titleTableDescr" colspan="3">'
              l_domname_1
            '</td>'
            '<td colspan="2">' l_domdescr_1 '</td>'
          '</tr>'
          '<tr>'
            '<td colspan="3">&#160;</td>'
            '<td class="titleTableText">' txt_data_type '</td>'
            '<td>' l_datatype_1 '</td>'
            '<td colspan="3">' l_datadescr_1 '</td>'
          '</tr>'
          '<tr>'
            '<td colspan="3">&#160;</td>'
            '<td class="titleTableText">' txt_length '</td>'
            '<td>' l_dataleng_1 '</td>'
            '<td class="titleTableText" colspan="2">'
              txt_decimal_places___m
            '</td>'
            '<td>' l_datadeci_1 '</td>'
          '</tr>'
          '<tr><td colspan="8">&#160;</td></tr>'
          '<tr>'
            '<td>&#160;</td>'
            '<td>'
              '<input ' l_checked_2 ' class="radio"'
              ' disabled="disabled" name="subtype"'
              ' type="radio" value="buildinType"/>'
            '</td>'
            '<td>' txt_built_in_type '</td>'
            '<td class="titleTableText">' txt_data_type '</td>'
            '<td class="titleTableDescr">' l_datatype_2 '</td>'
            '<td colspan="3">&#160;</td>'
          '</tr>'
          '<tr>'
            '<td colspan="3">&#160;</td>'
            '<td class="titleTableText">' txt_length '</td>'
            '<td class="titleTableDescr">' l_dataleng_2 '</td>'
            '<td class="titleTableText" colspan="2">'
              txt_decimal_places___m
            '</td>'
            '<td class="titleTableDescr">' l_datadeci_2 '</td>'
          '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  IF is_data_type-reftype <> '#'.
    CONCATENATE
          '<tr>'
            '<td>'
              '<input ' l_checked_34 ' class="radio"'
              ' disabled="disabled" name="type"'
              ' type="radio" value="referenceType"/>'
            '</td>'
            '<td colspan="2">' txt_reference_type '</td>'
            '<td colspan="5">&#160;</td>'
          '</tr>'
          '<tr>'
            '<td>&#160;</td>'
            '<td>'
              '<input ' l_checked_3 ' class="radio"'
              ' disabled="disabled" name="subtype"'
              ' type="radio" value="referencedType"/>'
            '</td>'
            '<td>' txt_name_of_ref_type '</td>'
            '<td class="titleTableDescr" colspan="3">'
              l_reftypename_3
            '</td>'
            '<td colspan="2">&#160;</td>'
          '</tr>'
          '<tr><td colspan="8">&#160;</td></tr>'
          '<tr>'
            '<td>&#160;</td>'
            '<td>'
              '<input ' l_checked_4 ' class="radio"'
              ' disabled="disabled" name="subtype"'
              ' type="radio" value="referenceToBuildinType"/>'
            '</td>'
            '<td>' txt_reference_to_predefined_ty '</td>'
            '<td colspan="5">&#160;</td>'
          '</tr>'
          '<tr>'
            '<td colspan="3">&#160;</td>'
            '<td class="titleTableText">' txt_data_type '</td>'
            '<td>' l_datatype_4 '</td>'
            '<td colspan="3">' l_datadescr_4 '</td>'
          '</tr>'
          '<tr>'
            '<td colspan="3">&#160;</td>'
            '<td class="titleTableText">' txt_length '</td>'
            '<td>' l_dataleng_4 '</td>'
            '<td class="titleTableText" colspan="2">'
              txt_decimal_places___m
            '</td>'
            '<td>' l_datadeci_4 '</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  CONCATENATE
        '</table>'
      '</form>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_data_type


*-----------------------------------------------------------------------
* form: html_add_definition_1
*-----------------------------------------------------------------------
FORM html_add_definition_1
  USING
    is_definition TYPE st_definition_1
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_dataleng TYPE string,
  l_datadeci TYPE string,
  l_outputlen TYPE string,
  lt_ti TYPE it_textinput,
  ls_ti TYPE st_textinput,
  l_datatype TYPE char255,
  l_datadescr TYPE char255,
  l_convexit TYPE char255,
  l_signflag TYPE char255,
  l_lowercase TYPE char255.

  WRITE is_definition-datatype TO l_datatype.
  WRITE is_definition-datadescr TO l_datadescr.
  WRITE is_definition-convexit TO l_convexit.
  WRITE is_definition-signflag TO l_signflag.
  WRITE is_definition-lowercase TO l_lowercase.

  PERFORM get_unpacked
    USING
      is_definition-dataleng
    CHANGING
      l_dataleng.
  PERFORM get_unpacked
    USING
      is_definition-datadeci
    CHANGING
      l_datadeci.
  PERFORM get_unpacked
    USING
      is_definition-outputlen
    CHANGING
      l_outputlen.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table class="titleTable">'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  REFRESH lt_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_data_type.
  ls_ti-value = l_datatype.
  ls_ti-input = abap_true.
  ls_ti-description = l_datadescr.
  APPEND ls_ti TO lt_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_no_of_characters.
  ls_ti-value = l_dataleng.
  ls_ti-input = abap_true.
  APPEND ls_ti TO lt_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_decimal_places___m.
  ls_ti-value = l_datadeci.
  ls_ti-input = abap_true.
  APPEND ls_ti TO lt_ti.

  PERFORM html_add_box_textinputnodiv
    USING
      txt_formatting
      lt_ti
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  REFRESH lt_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_output_length.
  ls_ti-value = l_outputlen.
  ls_ti-input = abap_true.
  APPEND ls_ti TO lt_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_convers_routine.
  ls_ti-value = l_convexit.
  ls_ti-input = abap_true.
  APPEND ls_ti TO lt_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_sign.
  ls_ti-value = l_signflag.
  ls_ti-flag = abap_true.
  APPEND ls_ti TO lt_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_lowercase.
  ls_ti-value = l_lowercase.
  ls_ti-flag = abap_true.
  APPEND ls_ti TO lt_ti.

  PERFORM html_add_box_textinputnodiv
    USING
      txt_output_characteristics
      lt_ti
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "addHTMLDefinition_1


*-----------------------------------------------------------------------
* form: html_add_definition_2
*-----------------------------------------------------------------------
FORM html_add_definition_2
  USING
    is_definition TYPE st_definition_2
    i_param_table TYPE string
    it_param_content TYPE ANY TABLE
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  lt_ti TYPE it_textinput,
  ls_ti TYPE st_textinput,
  l_selmethod TYPE char255,
  l_texttab TYPE char255,
  l_dialogtype TYPE char255,
  l_hotkey TYPE char255,
  l_selmexit TYPE char255.

  WRITE is_definition-selmethod TO l_selmethod.
  WRITE is_definition-texttab TO l_texttab.
  WRITE is_definition-dialogtype TO l_dialogtype.
  WRITE is_definition-hotkey TO l_hotkey.
  WRITE is_definition-selmexit TO l_selmexit.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table class="titleTable">'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  REFRESH lt_ti.
  ls_ti-name = txt_selection_method.
  ls_ti-value = l_selmethod.
  ls_ti-input = abap_true.
  APPEND ls_ti TO lt_ti.
  ls_ti-name = txt_text_table.
  ls_ti-value = l_texttab.
  ls_ti-input = abap_false.
  APPEND ls_ti TO lt_ti.
  PERFORM html_add_box_textinputnodiv
    USING
      txt_data_collection
      lt_ti
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  REFRESH lt_ti.
  ls_ti-name = txt_dialog_type.
  ls_ti-value = l_dialogtype.
  ls_ti-input = abap_true.
  APPEND ls_ti TO lt_ti.
  ls_ti-name = txt_hot_key.
  ls_ti-value = l_hotkey.
  ls_ti-input = abap_true.
  APPEND ls_ti TO lt_ti.
  PERFORM html_add_box_textinputnodiv
    USING
      txt_dialog_behavior
      lt_ti
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr>'
          '<td colspan="2">'
            '<table>'
              '<tr>'
                '<td class="titleTableText">'
                  txt_search_help_exit
                '</td>'
                '<td class="titleTableDescr">' l_selmexit '</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
        '<tr><td colspan="2">&#160;</td></tr>'
        '<tr>'
          '<td colspan="2">'
            '<table border="0" cellpadding="0" cellspacing="0"'
            ' class="container">'
              '<tr>'
                '<td class="containerTitle">' txt_parameters '</td>'
              '</tr>'
              '<tr>'
                '<td class="containerContent">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_tablenodiv
    USING
      i_param_table
      it_param_content
      it_param_content
    CHANGING
      ct_html.

  CONCATENATE
                '</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_definition_2


*-----------------------------------------------------------------------
* form: html_add_deliv_maint
*-----------------------------------------------------------------------
FORM html_add_deliv_maint
  USING
    is_deliv_maint TYPE st_deliv_maint
    it_access TYPE it_access
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_tabix TYPE sytabix,
  l_checked TYPE string,
  ls_html TYPE string,
  l_rowcount TYPE i,
  l_rowspan TYPE string,

  l_contflag TYPE char255,
  l_contflag_text TYPE char255,
  l_mainflag_text TYPE char255,
  l_sqltab TYPE char255.

  FIELD-SYMBOLS:
  <ls_access> TYPE st_access.

  WRITE is_deliv_maint-contflag TO l_contflag.
  WRITE is_deliv_maint-contflag_text TO l_contflag_text.
  WRITE is_deliv_maint-mainflag_text TO l_mainflag_text.
  WRITE is_deliv_maint-sqltab TO l_sqltab.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  APPEND '<table class="titleTable">' TO ct_html.
*pool/cluster
  IF NOT l_sqltab IS INITIAL.
    CONCATENATE
        '<tr>'
          '<td class="titleTableText">' txt_pool_cluster '</td>'
          '<td class="titleTableDescr" colspan="3">' l_sqltab '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
*access
  IF NOT it_access IS INITIAL.
    CONCATENATE
        '<tr>'
          '<td colspan="4">'
        INTO ls_html.
    APPEND ls_html TO ct_html.

    PERFORM html_add_box_radiobuttonsnodiv
      USING
        txt_access
        'access'
        it_access
      CHANGING
        ct_html.

    CONCATENATE
          '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
*cont
  IF is_deliv_maint-display_cont = abap_true.
    CONCATENATE
        '<tr>'
          '<td class="titleTableText">' txt_delivery_class '</td>'
          '<td class="titleTableDescr">' l_contflag '</td>'
          '<td>'
            l_contflag_text
          '</td>'
          '<td colspan="2">&#160;</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
*main
  IF is_deliv_maint-display_main = abap_true.
    CONCATENATE
        '<tr>'
          '<td class="titleTableText">'
            txt_data_browser_table_view_ma
          '</td>'
          '<td class="titleTableDescr" colspan="3">'
            l_mainflag_text
          '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
***
  APPEND '</table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_deliv_maint


*-----------------------------------------------------------------------
* form: html_add_div_begin
*-----------------------------------------------------------------------
FORM html_add_div_begin
  USING
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_style TYPE string,
  ls_html TYPE string.

  IF i_on = abap_true.
    l_style = 'display:block;visibility:visible'.
  ELSE.
    l_style = 'display:none;visibility:hidden'.
  ENDIF.

  CONCATENATE
      '<div class="contentDiv" id="' i_id 'div" style="' l_style ';">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "html_add_div_begin


*-----------------------------------------------------------------------
* form: html_add_div_end
*-----------------------------------------------------------------------
FORM html_add_div_end
  CHANGING
    ct_html TYPE it_string.

  APPEND '</div>' TO ct_html.

ENDFORM.                    "html_add_div_end


*-----------------------------------------------------------------------
* form: html_add_doc
*-----------------------------------------------------------------------
FORM html_add_doc
  USING
    it_doc TYPE it_string
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_text TYPE string,
  ls_html TYPE string,
  l_tabix TYPE string,
  l_titletag_open TYPE string,
  l_titletag_close TYPE string.

  FIELD-SYMBOLS:
  <ls_doc> TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table class="scrollTable">'
        '<tr>'
          '<td style="border-spacing:0px;padding:0px">'
            '<div id="' i_id 'scroll" class="scrollDiv">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  LOOP AT it_doc ASSIGNING <ls_doc>.
    APPEND <ls_doc> TO ct_html.
  ENDLOOP.

  CONCATENATE
            '</div>'
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_doc


*-----------------------------------------------------------------------
* form: html_add_field_label
*-----------------------------------------------------------------------
FORM html_add_field_label
  USING
    is_field_label TYPE st_field_label
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_uname TYPE string,
  l_date_last_changed TYPE string,
  l_pack TYPE string,
  l_pack_descr TYPE string,
  l_langu TYPE sylangu,
  l_langu_descr TYPE string,
  ls_html TYPE string,

  l_headlen TYPE string,
  l_reptext TYPE char255,
  l_scrlen_s TYPE string,
  l_scrlen_m TYPE string,
  l_scrlen_l TYPE string,
  l_scrtext_s TYPE char255,
  l_scrtext_m TYPE char255,
  l_scrtext_l TYPE char255.

  WRITE is_field_label-reptext TO l_reptext.
  WRITE is_field_label-scrtext_l TO l_scrtext_l.
  WRITE is_field_label-scrtext_m TO l_scrtext_m.
  WRITE is_field_label-scrtext_s TO l_scrtext_s.

  PERFORM get_unpacked
    USING
      is_field_label-headlen
    CHANGING
      l_headlen.
  PERFORM get_unpacked
    USING
      is_field_label-scrlen_l
    CHANGING
      l_scrlen_l.
  PERFORM get_unpacked
    USING
      is_field_label-scrlen_m
    CHANGING
      l_scrlen_m.
  PERFORM get_unpacked
    USING
      is_field_label-scrlen_s
    CHANGING
      l_scrlen_s.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table class="titleTable">'
        '<tr>'
          '<td>&#160;</td>'
          '<td colspan="2">' txt_length '</td>'
          '<td colspan="4">' txt_field_label '</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">' txt_short '</td>'
          '<td class="titleTableDescr">' l_scrlen_s '</td>'
          '<td>&#160;</td>'
          '<td class="titleTableDescr">' l_scrtext_s '</td>'
          '<td colspan="3">&#160;</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">' txt_medium '</td>'
          '<td class="titleTableDescr">' l_scrlen_m '</td>'
          '<td>&#160;</td>'
          '<td class="titleTableDescr" colspan="2">' l_scrtext_m '</td>'
          '<td colspan="2">&#160;</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">' txt_long '</td>'
          '<td class="titleTableDescr">' l_scrlen_l '</td>'
          '<td>&#160;</td>'
          '<td class="titleTableDescr" colspan="3">' l_scrtext_l '</td>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td class="titleTableText">' txt_heading '</td>'
          '<td class="titleTableDescr">' l_headlen '</td>'
          '<td>&#160;</td>'
          '<td class="titleTableDescr" colspan="4">' l_reptext '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_field_label


*-----------------------------------------------------------------------
* form: html_add_further_char
*-----------------------------------------------------------------------
FORM html_add_further_char
  USING
    is_further_char TYPE st_further_char
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  lt_ti TYPE it_textinput,
  ls_ti TYPE st_textinput,
  l_deffdname TYPE char255,
  l_memoryid TYPE char255,
  l_shlpfield TYPE char255,
  l_shlpname TYPE char255,
  l_checked TYPE string.

  WRITE is_further_char-deffdname TO l_deffdname.
  WRITE is_further_char-memoryid TO l_memoryid.
  WRITE is_further_char-shlpfield TO l_shlpfield.
  WRITE is_further_char-shlpname TO l_shlpname.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table class="titleTable">'
        '<tr>'
          '<td colspan="2">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  REFRESH lt_ti.
  ls_ti-name = txt_name.
  ls_ti-value = l_shlpname.
  ls_ti-input = abap_true.
  APPEND ls_ti TO lt_ti.
  ls_ti-name = txt_parameters.
  ls_ti-value = l_shlpfield.
  ls_ti-input = abap_true.
  APPEND ls_ti TO lt_ti.
  PERFORM html_add_box_textinputnodiv
    USING
      txt_srch_help
      lt_ti
    CHANGING
      ct_html.

  CLEAR l_checked.
  IF is_further_char-logflag = abap_true.
    l_checked = ' checked="checked"'.
  ENDIF.
  CONCATENATE
          '</td>'
        '</tr>'
        '<tr><td colspan="2">&#160;</td></tr>'
        '<tr>'
          '<td class="titleTableText">' txt_parameter_id '</td>'
          '<td class="titleTableDescr">' l_memoryid '</td>'
        '</tr>'
        '<tr><td colspan="5">&#160;</td></tr>'
        '<tr>'
          '<td class="titleTableText">'
            txt_default_component_name
          '</td>'
          '<td class="titleTableDescr">' l_deffdname '</td>'
        '</tr>'
        '<tr><td colspan="2">&#160;</td></tr>'
        '<tr>'
          '<td colspan="2">'
            '<table>'
              '<tr>'
                '<td>'
                  '<input class="innerTableFlag"'
                  l_checked
                  ' disabled="disabled" type="checkbox"'
                  ' value="' is_further_char-logflag '"/>'
                '</td>'
                '<td>' txt_change_document '</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_further_char


*-----------------------------------------------------------------------
* form: html_add_iFrame
*-----------------------------------------------------------------------
FORM html_add_iframe
  USING
    value(i_url)
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  APPEND '<table class="scrollTable">' TO ct_html.
  CONCATENATE
        '<tr>'
          '<td id="' i_id 'iframe"'
            ' style="border-spacing:0px;padding:0px">'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  IF NOT i_url IS INITIAL.
    CONCATENATE
            '<iframe frameborder="0"'
              ' height="400"'
              ' id="' i_id 'scroll"'
              ' scrolling="auto"'
              ' src="' i_url '"'
              ' width="90%">'
            '</iframe>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_iFrame


*-----------------------------------------------------------------------
* form: html_add_init_access
*-----------------------------------------------------------------------
FORM html_add_init_access
  USING
    is_init_access TYPE st_init_access
    it_accessmode TYPE it_access
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_info1 TYPE char255,
  l_info2 TYPE char255,
  l_occurs TYPE string.

  WRITE is_init_access-info1 TO l_info1.
  WRITE is_init_access-info2 TO l_info2.

  PERFORM get_unpacked
    USING
      is_init_access-occurs
    CHANGING
      l_occurs.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  APPEND '<table class="titleTable">' TO ct_html.
  IF NOT is_init_access-info1 IS INITIAL.
    CONCATENATE
        '<tr>'
          '<td class="info" colspan="3">' l_info1 '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  IF is_init_access-unknown = abap_false.
    CONCATENATE
          '<tr>'
            '<td class="titleTableText">'
              txt_initial_line_number
            '</td>'
            '<td class="titleTableDescr">'
              l_occurs
            '</td>'
            '<td>&#160;</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  IF NOT is_init_access-info2 IS INITIAL.
    CONCATENATE
        '<tr>'
          '<td class="info" colspan="3">' l_info2 '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  CONCATENATE
        '<tr>'
          '<td colspan="3">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_radiobuttonsnodiv
    USING
      txt_access
      'accessmode'
      it_accessmode
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_init_access


*-----------------------------------------------------------------------
* form: html_add_key
*-----------------------------------------------------------------------
FORM html_add_key
  USING
    is_key TYPE st_key
    it_keydef TYPE it_access
    it_keykind TYPE it_access
    i_keycomp_table TYPE string
    it_keycomp_content TYPE ANY TABLE
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  APPEND '<table class="titleTable">' TO ct_html.
  IF NOT is_key-info IS INITIAL.
    CONCATENATE
        '<tr>'
          '<td class="info" colspan="8">'
            is_key-info
          '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  CONCATENATE
        '<tr>'
          '<td style="vertical-align:top">'
        INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_radiobuttonsnodiv
    USING
      txt_key_definition
      'keydef'
      it_keydef
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
          '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_radiobuttonsnodiv
    USING
      txt_key_category
      'keykind'
      it_keykind
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr>'
          '<td colspan="2">&#160;</td>'
        '</tr>'
        '<tr>'
          '<td colspan="2">'
            '<table border="0" cellpadding="0" cellspacing="0"'
            ' class="container">'
              '<tr>'
                '<td class="containerTitle">' txt_key_components '</td>'
              '</tr>'
              '<tr>'
                '<td class="containerContent">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_tablenodiv
    USING
      i_keycomp_table
      it_keycomp_content
      it_keycomp_content
    CHANGING
      ct_html.

  CONCATENATE
                '</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_key


*-----------------------------------------------------------------------
* form: html_add_line_type_1
*-----------------------------------------------------------------------
FORM html_add_line_type_1
  USING
    is_line_type TYPE st_line_type
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_info TYPE char255,

  l_checked_1 TYPE string,
  l_linetype_1 TYPE string,
  l_rowtype_1 TYPE char255,
  l_rowdescr_1 TYPE char255,

  l_checked_2 TYPE string,
  l_datatype_2 TYPE char255,
  l_dataleng_2 TYPE string,
  l_datadeci_2 TYPE string,
  l_info_2 TYPE string,

  l_checked_3 TYPE string,

  l_checked_31 TYPE string,
  l_reftypename_31 TYPE char255,
  l_reftypedescr_31 TYPE char255,

  l_checked_32 TYPE string,
  l_datatype_32 TYPE char255,
  l_dataleng_32 TYPE string,
  l_datadeci_32 TYPE string.


  CASE is_line_type-rowkind.
    WHEN 'E'.
      l_checked_1 = ' checked="checked" '.
      l_linetype_1 = txt_elementary_type.
      WRITE is_line_type-rowtype TO l_rowtype_1.
      WRITE is_line_type-rowdescr TO l_rowdescr_1.
    WHEN 'S'.
      l_checked_1 = ' checked="checked" '.
      l_linetype_1 = txt_structured_type.
      WRITE is_line_type-rowtype TO l_rowtype_1.
      WRITE is_line_type-rowdescr TO l_rowdescr_1.
    WHEN 'L'.
      l_checked_1 = ' checked="checked" '.
      l_linetype_1 = txt_table_type.
      WRITE is_line_type-rowtype TO l_rowtype_1.
      WRITE is_line_type-rowdescr TO l_rowdescr_1.
    WHEN space.
      l_checked_2 = ' checked="checked" '.
      WRITE is_line_type-datatype TO l_datatype_2.
      PERFORM get_unpacked
        USING
          is_line_type-dataleng
        CHANGING
          l_dataleng_2.
      PERFORM get_unpacked
        USING
          is_line_type-datadeci
        CHANGING
          l_datadeci_2.
      IF is_line_type-dataleng IS INITIAL.
        l_info_2 = txt_no_length_restriction.
      ENDIF.
    WHEN 'R'.
      l_checked_3 = ' checked="checked" '.
      CASE is_line_type-reftype.
        WHEN 'D' OR 'O'.
          l_checked_31 = ' checked="checked" '.
          WRITE is_line_type-rowtype TO l_reftypename_31.
        WHEN 'B'.
          l_checked_32 = ' checked="checked" '.
          WRITE is_line_type-rowtype TO l_datatype_32.
          PERFORM get_unpacked
            USING
              is_line_type-dataleng
            CHANGING
              l_dataleng_32.
          PERFORM get_unpacked
            USING
              is_line_type-datadeci
            CHANGING
              l_datadeci_32.
        WHEN 'E' OR 'S' OR 'C' OR 'I'.
          l_checked_31 = ' checked="checked" '.
          WRITE is_line_type-rowtype TO l_reftypename_31.
          WRITE is_line_type-refdescr TO l_reftypedescr_31.
      ENDCASE.
  ENDCASE.

  PERFORM html_add_div_begin
    USING i_id i_on
    CHANGING ct_html.

  WRITE is_line_type-info TO l_info.

  CONCATENATE
      '<form action="#" method="post">'
        '<table class="titleTable">'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  IF NOT l_info IS INITIAL.
    CONCATENATE
          '<tr>'
            '<td class="info" colspan="8">'
              l_info
            '</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  CONCATENATE
          '<tr>'
            '<td>'
              '<input ' l_checked_1 ' class="radio"'
              ' disabled="disabled" name="subtype"'
              ' type="radio" value="domain"/>'
            '</td>'
            '<td colspan="2">' txt_line_type '</td>'
            '<td class="titleTableDescr" colspan="3">'
              l_rowtype_1
            '</td>'
            '<td>' l_rowdescr_1 '</td>'
            '<td>' l_linetype_1 '</td>'
          '</tr>'
          '<tr><td colspan="8">&#160;</td></tr>'
          '<tr>'
            '<td>'
              '<input ' l_checked_2 ' class="radio"'
              ' disabled="disabled" name="subtype"'
              ' type="radio" value="buildinType"/>'
            '</td>'
            '<td colspan="2">' txt_built_in_type '</td>'
            '<td colspan="5">&#160;</td>'
          '</tr>'
          '<tr>'
            '<td colspan="2">&#160;</td>'
            '<td class="titleTableText" colspan="2">'
              txt_data_type
            '</td>'
            '<td class="titleTableDescr" colspan="2">'
              l_datatype_2
            '</td>'
            '<td colspan="3">&#160;</td>'
          '</tr>'
          '<tr>'
            '<td colspan="2">&#160;</td>'
            '<td class="titleTableText">' txt_no_of_characters '</td>'
            '<td class="titleTableDescr">' l_dataleng_2 '</td>'
            '<td>&#160;</td>'
            '<td class="titleTableText" colspan="2">'
              txt_decimal_places___m
            '</td>'
            '<td class="titleTableDescr">' l_datadeci_2 '</td>'
            '<td>&#160;</td>'
          '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  IF NOT l_info_2 IS INITIAL.
    CONCATENATE
          '<tr>'
            '<td class="info" colspan="8">'
              l_info_2
            '</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  IF is_line_type-reftype <> '#'.  "R/3 4.6 does not know ref type
    CONCATENATE
          '<tr><td colspan="8">&#160;</td></tr>'
          '<tr>'
            '<td>'
              '<input ' l_checked_3 ' class="radio"'
              ' disabled="disabled" name="type"'
              ' type="radio" value="referenceType"/>'
            '</td>'
            '<td colspan="2">' txt_reference_type '</td>'
            '<td colspan="5">&#160;</td>'
          '</tr>'
          '<tr>'
            '<td>&#160;</td>'
            '<td>'
              '<input ' l_checked_31 ' class="radio"'
              ' disabled="disabled" name="subtype"'
              ' type="radio" value="referencedType"/>'
            '</td>'
            '<td colspan="2">' txt_name_of_ref_type '</td>'
            '<td class="titleTableDescr" colspan="3">'
              l_reftypename_31
            '</td>'
            '<td>' l_reftypedescr_31 '</td>'
          '</tr>'
          '<tr><td colspan="8">&#160;</td></tr>'
          '<tr>'
            '<td>&#160;</td>'
            '<td>'
              '<input ' l_checked_32 ' class="radio"'
              ' disabled="disabled" name="subtype"'
              ' type="radio" value="referenceToBuildinType"/>'
            '</td>'
            '<td>' txt_reference_to_predefined_ty '</td>'
            '<td colspan="5">&#160;</td>'
          '</tr>'
          '<tr>'
            '<td colspan="3">&#160;</td>'
            '<td class="titleTableText">' txt_data_type '</td>'
            '<td>' l_datatype_32 '</td>'
            '<td colspan="3">&#160;</td>'
          '</tr>'
          '<tr>'
            '<td colspan="3">&#160;</td>'
            '<td class="titleTableText">' txt_length '</td>'
            '<td>' l_dataleng_32 '</td>'
            '<td class="titleTableText" colspan="2">'
              txt_decimal_places___m
            '</td>'
            '<td>' l_datadeci_32 '</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  CONCATENATE
        '</table>'
      '</form>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING ct_html.

ENDFORM.                    "html_add_line_type_1


*-----------------------------------------------------------------------
* form: html_add_line_type_2
*-----------------------------------------------------------------------
FORM html_add_line_type_2
  USING
    is_line_type TYPE st_line_type
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_info TYPE char255,

  l_checked_1 TYPE string,
  l_range_ctyp_1 TYPE string,

  l_checked_2 TYPE string,
  l_datatype_2 TYPE char255,
  l_datadescr_2 TYPE string,
  l_dataleng_2 TYPE string,
  l_datadeci_2 TYPE string,

  l_rowtype TYPE char255.


  IF NOT is_line_type-range_ctyp IS INITIAL.
    l_checked_1 = ' checked="checked" '.
    l_range_ctyp_1 = is_line_type-range_ctyp.
  ELSE.
    l_checked_2 = ' checked="checked" '.
    WRITE is_line_type-ctdatatype TO l_datatype_2.
    PERFORM get_dom_value_text
      USING 'DATATYP' l_datatype_2
      CHANGING l_datadescr_2.
    PERFORM get_unpacked
      USING is_line_type-ctleng
      CHANGING l_dataleng_2.
    PERFORM get_unpacked
      USING is_line_type-ctdecimals
      CHANGING l_datadeci_2.
  ENDIF.

  WRITE is_line_type-rowtype TO l_rowtype.


  PERFORM html_add_div_begin
    USING i_id i_on
    CHANGING ct_html.

  CONCATENATE
      '<form action="#" method="post">'
        '<table class="titleTable">'
          '<tr>'
            '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_begin
    USING txt_associated_type_for_low_hi '1'
    CHANGING ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td>'
            '<input ' l_checked_1 ' class="radio"'
            ' disabled="disabled" name="subtype"'
            ' type="radio" value="domain"/>'
          '</td>'
          '<td>' txt_data_element___1 '</td>'
          '<td class="titleTableDescr" colspan="3">'
            l_range_ctyp_1
          '</td>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td>'
            '<input ' l_checked_2 ' class="radio"'
            ' disabled="disabled" name="subtype"'
            ' type="radio" value="domain"/>'
          '</td>'
          '<td>' txt_built_in_type '</td>'
          '<td colspan="4">&#160;</td>'
        '</tr>'
        '<tr>'
          '<td>&#160;</td>'
          '<td class="titleTableText">' txt_data_type '</td>'
          '<td class="titleTableDescr" colspan="2">'
            l_datatype_2
          '</td>'
          '<td colspan="2">' l_datadescr_2 '</td>'
        '</tr>'
        '<tr>'
          '<td>&#160;</td>'
          '<td class="titleTableText">' txt_no_of_characters '</td>'
          '<td class="titleTableDescr">' l_dataleng_2 '</td>'
          '<td>&#160;</td>'
          '<td class="titleTableText">' txt_decimal_places___m '</td>'
          '<td class="titleTableDescr">' l_datadeci_2 '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_end
    CHANGING ct_html.

  CONCATENATE
            '</td>'
          '</tr>'
          '<tr><td>&#160;</td></tr>'
          '<tr>'
            '<td>'
              '<table>'
                '<tr>'
                  '<td class="titleTableText">'
                    txt_structured_row_type
                  '</td>'
                  '<td class="titleTableDescr">'
                    l_rowtype
                  '</td>'
                '</tr>'
              '</table>'
            '</td>'
          '</tr>'
        '</table>'
      '</form>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_line_type_2


*-----------------------------------------------------------------------
* form: html_add_meta
*-----------------------------------------------------------------------
FORM html_add_meta
        CHANGING
          ct_html TYPE it_string.

  DATA:
    l_laiso TYPE laiso,
    l_sptxt TYPE sptxt,
    ls_html TYPE string.

  PERFORM get_spras USING sy-langu l_laiso l_sptxt.

* charset
  APPEND '<meta charset="iso-8859-1"/>' TO ct_html.
* application-name
  APPEND '<meta name="application-name" content="SoftCopy"/>'
    TO ct_html.
* author
  APPEND '<meta name="author" content="Ruediger von Creytz"/>'
    TO ct_html.
* copyright
  APPEND '<meta name="copyright" content="globalBIT, LLC"/>'
    TO ct_html.
* date
  CONCATENATE
    '<meta name="date" content="'
    sy-datum+0(4) '-' sy-datum+4(2) '-' sy-datum+6(2) '">'
    INTO ls_html.
  APPEND ls_html TO ct_html.
* generator
  CONCATENATE
    '<meta name="generator" content="SoftCopy.' gc_version '"/>'
    INTO ls_html.
  APPEND ls_html TO ct_html.
* language
  CONCATENATE
    '<meta name="language" content="' l_laiso '"/>'
    INTO ls_html.
  APPEND ls_html TO ct_html.
* rights
  APPEND '<meta name="rights" content="globalBIT, LLC"/>'
    TO ct_html.

ENDFORM.                    "html_add_meta


*-----------------------------------------------------------------------
* form: html_add_methodNoDiv
*-----------------------------------------------------------------------
FORM html_add_methodnodiv
        USING
          value(i_cpdname)
          value(i_active)
          value(i_text_method)
          i_table TYPE string
          it_table TYPE ANY TABLE
          it_table_ext TYPE ANY TABLE
          it_source TYPE it_string
          value(i_filename)
          value(i_filename_no_includes)
          value(i_filename_compressed)
          value(i_extension)
          value(i_id)
        CHANGING
          ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_id_sc TYPE string.

  CONCATENATE
    '<table class="titleTable">'
      '<tr>'
        '<td>'
    INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_tablenodiv
    USING
      i_table
      it_table
      it_table_ext
    CHANGING
      ct_html.

  CONCATENATE
        '</td>'
      '</tr>'
      '<tr>'
        '<td style="padding-bottom:2px;padding-top:5px">'
          '<table class="titleTable">'
            '<tr>'
              '<td class="titleTableText">' i_text_method '</td>'
              '<td class="titleTableDescr">' i_cpdname '</td>'
              '<td>' i_active '</td>'
              '<td>&#160;</td>'
            '</tr>'
          '</table>'
        '</td>'
      '</tr>'
      '<tr>'
        '<td>'
    INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM get_id
    USING i_id 'SC'
    CHANGING l_id_sc.
  PERFORM html_add_sourcecodenodiv
    USING
      it_source
      i_filename
      i_filename_no_includes
      i_filename_compressed
      i_extension
      l_id_sc
    CHANGING
      ct_html.

  CONCATENATE
        '</td>'
      '</tr>'
    '</table>'
    INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "html_add_methodNoDiv


*-----------------------------------------------------------------------
* form: html_add_properties
*-----------------------------------------------------------------------
FORM html_add_properties
        USING
          is_properties TYPE st_properties
          it_ti TYPE it_textinput
          i_typegroup_table TYPE string
          it_typegroup TYPE ANY TABLE
          value(i_id)
          value(i_on)
        CHANGING
          ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_superclass TYPE char255,
  l_check_model_inh TYPE flag,
  l_description TYPE char255,
  l_creatable TYPE char255,
  l_clsfinal TYPE flag,
  l_checked TYPE string.

  WRITE is_properties-superclass TO l_superclass.
  WRITE is_properties-check_model_inh TO l_check_model_inh.
  WRITE is_properties-descript TO l_description.
  WRITE is_properties-creatable TO l_creatable.
  WRITE is_properties-clsfinal TO l_clsfinal.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table class="titleTable">'
        '<tr>'
          '<td>'
            '<table class="titleTable">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  IF NOT l_superclass IS INITIAL.
    CLEAR l_checked.
    IF l_check_model_inh = abap_true.
      l_checked = ' checked="checked"'.
    ENDIF.
    CONCATENATE
              '<tr>'
                '<td class="titleTableText">' txt_superclass '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  l_superclass
                '</td>'
                '<td colspan="2">'
                  '<table>'
                    '<tr>'
                      '<td>'
                        '<input class="innerTableFlag"'
                        l_checked
                        ' disabled="disabled" type="checkbox"'
                        ' value="' l_check_model_inh '"/>'
                      '</td>'
                      '<td>' txt_modeled_only '</td>'
                    '</tr>'
                  '</table>'
                '</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  IF NOT l_description IS INITIAL.
    CONCATENATE
              '<tr>'
                '<td class="titleTableText">' txt_description '</td>'
                '<td class="titleTableDescr" colspan="3">'
                  l_description
                '</td>'
                '<td>&#160;</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  IF NOT l_creatable IS INITIAL.
    IF l_clsfinal = abap_true.
      l_checked = ' checked="checked"'.
    ENDIF.
    CONCATENATE
              '<tr>'
                '<td class="titleTableText">' txt_instantiation '</td>'
                '<td class="titleTableDescr">'
                  l_creatable
                '</td>'
                '<td colspan="3">&#160;</td>'
              '</tr>'
              '<tr>'
                '<td colspan="5">'
                  '<table>'
                    '<tr>'
                      '<td>'
                        '<input class="innerTableFlag"'
                        l_checked
                        ' disabled="disabled" type="checkbox"'
                        ' value="' l_clsfinal '"/>'
                      '</td>'
                      '<td>' txt_final '</td>'
                    '</tr>'
                  '</table>'
                '</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  CONCATENATE
            '</table>'
          '</td>'
          '<td rowspan="2">'
            '<table border="0" cellpadding="0" cellspacing="0"'
            ' class="container">'
              '<tr>'
                '<td class="containerTitle">'
                  txt_forward_declarations
                '</td>'
              '</tr>'
              '<tr>'
                '<td class="containerContent">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_tablenodiv
    USING
      i_typegroup_table
      it_typegroup
      it_typegroup
    CHANGING
      ct_html.

  CONCATENATE
                '</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      txt_general_data
      it_ti
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_properties


*-----------------------------------------------------------------------
* form: html_add_properties_o2
*-----------------------------------------------------------------------
FORM html_add_properties_o2
  USING
    it_header TYPE it_textinput
    i_page_type_title TYPE string
    it_page_type_rb TYPE it_access
    it_page_type_ti TYPE it_textinput
    i_error_title TYPE string
    it_error TYPE it_textinput
    i_status_title TYPE string
    it_status_rb TYPE it_access
    it_status_ti TYPE it_textinput
    i_cache_title TYPE string
    it_cache_li TYPE it_textinput
    it_cache_re TYPE it_textinput
    i_transfer_title TYPE string
    it_transfer_li TYPE it_textinput
    it_transfer_re TYPE it_textinput
    it_footer TYPE it_textinput
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  APPEND '<table class="titleTable">' TO ct_html.

* Header
  IF NOT it_header IS INITIAL.
    CONCATENATE
          '<tr>'
            '<td>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
    PERFORM html_add_textinputnodiv
      USING it_header
      CHANGING ct_html.
    CONCATENATE
            '</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.

* Page Type
  IF NOT it_page_type_rb IS INITIAL
  AND NOT it_page_type_ti IS INITIAL.
    CONCATENATE
          '<tr>'
            '<td>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
    PERFORM html_add_box1rb_1tihornodiv
      USING i_page_type_title it_page_type_rb it_page_type_ti
      CHANGING ct_html.
    CONCATENATE
            '</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.

* Error Handling
  IF NOT it_error IS INITIAL.
    CONCATENATE
          '<tr>'
            '<td>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
    PERFORM html_add_box_textinputnodiv
      USING i_error_title it_error
      CHANGING ct_html.
    CONCATENATE
            '</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.

* Status
  IF NOT it_status_ti IS INITIAL AND NOT it_status_rb IS INITIAL.
    CONCATENATE
          '<tr>'
            '<td>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
    PERFORM html_add_box1rb_1tivernodiv
      USING i_status_title it_status_rb it_status_ti
      CHANGING ct_html.
    CONCATENATE
            '</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.

* Cache
  IF NOT it_cache_li IS INITIAL AND NOT it_cache_re IS INITIAL.
    CONCATENATE
          '<tr>'
            '<td>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
    PERFORM html_add_box_textinputdblnodiv
      USING i_cache_title it_cache_li it_cache_re
      CHANGING ct_html.
    CONCATENATE
            '</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.

* Transfer Options
  IF NOT it_transfer_li IS INITIAL
  AND NOT it_transfer_re IS INITIAL.
    CONCATENATE
          '<tr>'
            '<td>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
    PERFORM html_add_box_textinputdblnodiv
      USING i_transfer_title it_transfer_li it_transfer_re
      CHANGING ct_html.
    CONCATENATE
            '</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.

* Footer
  IF NOT it_footer IS INITIAL.
    CONCATENATE
          '<tr>'
            '<td>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
    PERFORM html_add_textinputnodiv
      USING it_footer
      CHANGING ct_html.
    CONCATENATE
            '</td>'
          '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.

*
  APPEND '</table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_properties_o2


*-----------------------------------------------------------------------
* form: html_add_radioButtonsNoDiv
*-----------------------------------------------------------------------
FORM html_add_radiobuttonsnodiv
  USING
    value(i_name)
    it_accessmode TYPE it_access
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_first_row TYPE flag VALUE abap_true,
  ls_html TYPE string,
  l_colspan TYPE n,
  l_name TYPE string,
  l_ddtext TYPE char255,
  l_tabix TYPE string.

  FIELD-SYMBOLS:
  <ls_access> TYPE st_access.

  APPEND '<table class="titleTable">' TO ct_html.

  LOOP AT it_accessmode ASSIGNING <ls_access>.
    l_tabix = sy-tabix.
    CONDENSE l_tabix.
    WRITE <ls_access>-ddtext TO l_ddtext.
    APPEND '<tr>' TO ct_html.
    IF <ls_access>-sub IS INITIAL.
      l_colspan = 2.
    ELSE.
      l_colspan = 1.
      APPEND '<td>&#160;</td>' TO ct_html.
    ENDIF.
    CONCATENATE
                '<td>'
                  '<input '
        INTO ls_html.
    IF <ls_access>-checked = abap_true.
      CONCATENATE ls_html ' checked="checked"' INTO ls_html.
    ENDIF.

    CONCATENATE i_name <ls_access>-sub INTO l_name.
    CONCATENATE
                  ls_html
                  ' class="radio"'
                  ' disabled="disabled" name="' l_name '"'
                  ' type="radio"'
                  ' value="' <ls_access>-sub 'x' l_tabix '"/>'
                '</td>'
                '<td colspan="' l_colspan '">'
                  '<span>' l_ddtext '</span>'
                '</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDLOOP.

  APPEND '</table>' TO ct_html.

ENDFORM.                    "html_add_radioButtonsNoDiv


*-----------------------------------------------------------------------
* form: html_add_sourceCode
*-----------------------------------------------------------------------
FORM html_add_sourcecode
  USING
    it_source TYPE it_string
    value(i_filename)
    value(i_filename_no_includes)
    value(i_filename_compressed)
    value(i_extension)
    value(i_id)
    value(i_on) TYPE flag
  CHANGING
    ct_html TYPE it_string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.
  PERFORM html_add_sourcecodenodiv
    USING
      it_source
      i_filename
      i_filename_no_includes
      i_filename_compressed
      i_extension
      i_id
    CHANGING
      ct_html.
  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_sourceCode


*-----------------------------------------------------------------------
* form: html_add_sourceCodeNoDiv
*-----------------------------------------------------------------------
FORM html_add_sourcecodenodiv
  USING
    it_source TYPE it_string
    value(i_filename)
    value(i_filename_no_includes)
    value(i_filename_compressed)
    value(i_extension)
    value(i_id)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_style TYPE string,
  l_source TYPE string,
  ls_html TYPE string,
  l_tabix TYPE string,
  lt_filename TYPE it_string,
  l_filename TYPE string,
  l_filename_no_includes TYPE string,
  l_filename_compressed TYPE string,
  l_strlen TYPE i.

  FIELD-SYMBOLS:
  <ls_source> TYPE string.

  SPLIT i_filename AT '/' INTO TABLE lt_filename.
  LOOP AT lt_filename INTO l_filename.
  ENDLOOP.
  PERFORM replace_all
    USING '<' '-'
    CHANGING l_filename.
  PERFORM replace_all
    USING '>' '-'
    CHANGING l_filename.

  SPLIT i_filename_no_includes AT '/' INTO TABLE lt_filename.
  LOOP AT lt_filename INTO l_filename_no_includes.
  ENDLOOP.
  PERFORM replace_all
    USING '<' '-'
    CHANGING l_filename_no_includes.
  PERFORM replace_all
    USING '>' '-'
    CHANGING l_filename_no_includes.

  SPLIT i_filename_compressed AT '/' INTO TABLE lt_filename.
  LOOP AT lt_filename INTO l_filename_compressed.
  ENDLOOP.
  PERFORM replace_all
    USING '<' '-'
    CHANGING l_filename_compressed.
  PERFORM replace_all
    USING '>' '-'
    CHANGING l_filename_compressed.

  APPEND '<table class="scrollTable">' TO ct_html.
  IF NOT l_filename IS INITIAL AND NOT i_extension IS INITIAL.
    CONCATENATE
        '<tr>'
          '<td style="border-spacing:0px;margin-right:1em;'
          'padding:0px;text-align:right">'
            '<table class="titleTable">'
              '<tr>'
                '<td class="button">'
                  '<a href="' l_filename '.' i_extension '"'
                  ' onclick="window.open(this.href); return false">'
                    i_extension
                  '</a>'
                '</td>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
    IF NOT l_filename_no_includes IS INITIAL.
      CONCATENATE
                '<td>&#160;</td>'
                '<td class="button">'
                  '<a href="' l_filename_no_includes '.' i_extension '"'
                  ' onclick="window.open(this.href); return false">'
                    txt_complete '.' i_extension
                  '</a>'
                '</td>'
          INTO ls_html.
      APPEND ls_html TO ct_html.
    ENDIF.

    IF NOT l_filename_compressed IS INITIAL.
      CONCATENATE
                '<td>&#160;</td>'
                '<td class="button">'
                  '<a href="' l_filename_compressed '.' i_extension '"'
                  ' onclick="window.open(this.href); return false">'
                    txt_compressed '.' i_extension
                  '</a>'
                '</td>'
          INTO ls_html.
      APPEND ls_html TO ct_html.
    ENDIF.

    CONCATENATE
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  CONCATENATE
        '<tr>'
          '<td style="border-spacing:0px;padding:0px">'
            '<div id="' i_id 'scroll" class="scrollDiv">'
              '<table class="src">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  LOOP AT it_source ASSIGNING <ls_source>.
    l_tabix = sy-tabix.
    CONDENSE l_tabix.
    l_style = 'srcLine'.
    l_strlen = strlen( <ls_source> ).
    IF l_strlen > 1 AND <ls_source>(1) = '*'.
      l_style = 'srcLineComment'.
    ENDIF.
    l_source = <ls_source>.
    PERFORM encode_html_force CHANGING l_source.
    IF l_source IS INITIAL.
      l_source = '&#160;'.
    ENDIF.
    CONCATENATE
                '<tr>'
                  '<td class="srcLineNumber">'
                    '<pre>' l_tabix '</pre>'
                  '</td>'
                  '<td class="' l_style '">'
                    '<pre>' l_source '</pre>'
                  '</td>'
                '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDLOOP.

  CONCATENATE
              '</table>'
            '</div>'
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "html_add_sourceCodeNoDiv


*-----------------------------------------------------------------------
* form: html_add_table
*-----------------------------------------------------------------------
FORM html_add_table
  USING
    i_table TYPE string
    it_content TYPE ANY TABLE
    it_content_ext TYPE ANY TABLE
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.
  PERFORM html_add_tablenodiv
    USING
      i_table
      it_content
      it_content_ext
    CHANGING
      ct_html.
  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_table


*-----------------------------------------------------------------------
* form: html_add_table2hor
*-----------------------------------------------------------------------
FORM html_add_table2hor
  USING
    i_table_l TYPE string
    it_content_l TYPE ANY TABLE
    it_content_ext_l TYPE ANY TABLE
    i_table_r TYPE string
    it_content_r TYPE ANY TABLE
    it_content_ext_r TYPE ANY TABLE
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_tablenodiv
    USING
      i_table_l
      it_content_l
      it_content_ext_l
    CHANGING
      ct_html.

  APPEND '</td><td>&#160;</td><td style="vertical-align:top">'
      TO ct_html.

  PERFORM html_add_tablenodiv
    USING
      i_table_r
      it_content_r
      it_content_ext_r
    CHANGING
      ct_html.

  APPEND '</td></tr></table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_table2hor


*-----------------------------------------------------------------------
* form: html_add_table2ver
*-----------------------------------------------------------------------
FORM html_add_table2ver
  USING
    i_table_o TYPE string
    it_content_o TYPE ANY TABLE
    it_content_ext_o TYPE ANY TABLE
    i_table_u TYPE string
    it_content_u TYPE ANY TABLE
    it_content_ext_u TYPE ANY TABLE
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_tablenodiv
    USING
      i_table_o
      it_content_o
      it_content_ext_o
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_tablenodiv
    USING
      i_table_u
      it_content_u
      it_content_ext_u
    CHANGING
      ct_html.

  APPEND '</td></tr></table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_table2ver


*-----------------------------------------------------------------------
* form: html_add_tableMaintGenerator
*-----------------------------------------------------------------------
FORM html_add_tablemaintgenerator
  USING
    value(i_tdd_title)
    it_tdd_textinput TYPE it_textinput
    value(i_tdd_subtitle)
    value(i_tdd_step) TYPE c
    value(i_tdd_overview_screen)
    value(i_tdd_single_screen)
    value(i_ddtd_title)
    value(i_ddtd_recording) TYPE flag
    value(i_ddtd_compare_flag) TYPE string
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box1ti_subboxmsnodiv
    USING
      i_tdd_title
      it_tdd_textinput
      i_tdd_subtitle
      i_tdd_step
      i_tdd_overview_screen
      i_tdd_single_screen
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr>'
          '<td>&#160;</td>'
        '</tr>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_data_transport
    USING
      i_ddtd_title
      i_ddtd_recording
      i_ddtd_compare_flag
    CHANGING
      ct_html.

  APPEND '</td></tr></table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_tableMaintGenerator


*-----------------------------------------------------------------------
* form: html_add_tableNoDiv
*-----------------------------------------------------------------------
FORM html_add_tablenodiv
  USING
    i_table TYPE string
    it_content TYPE ANY TABLE
    it_content_ext TYPE ANY TABLE
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_tabid TYPE string,
  l_tabcomp TYPE string,
  l_txt TYPE char255,
  l_text TYPE string,
  l_link TYPE char255,
  l_colored TYPE flag,
  l_class TYPE string,
  ls_html TYPE string,
  l_align TYPE string,
  l_tabix TYPE sytabix,
  l_int TYPE i,
  l_checked TYPE string,
  l_title TYPE string.

  FIELD-SYMBOLS:
  <ls_tabdef> TYPE st_table_structure,
  <ls_content> TYPE ANY,
  <ls_content_ext> TYPE ANY,
  <l_value> TYPE ANY,
  <l_link> TYPE ANY,
  <l_colored> TYPE ANY.

  SPLIT i_table AT '|' INTO l_tabid l_tabcomp.

  CONCATENATE
      '<table border="0" cellpadding="0" cellspacing="0"'
      ' class="innerTable">'
        '<tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

*title row
  LOOP AT gt_table_structure ASSIGNING <ls_tabdef>
      WHERE id = l_tabid.
    CASE <ls_tabdef>-comparator.
      WHEN 'CO'.
        IF NOT l_tabcomp CO <ls_tabdef>-comp_value.
          CONTINUE.
        ENDIF.
    ENDCASE.
    l_title = <ls_tabdef>-title.
    PERFORM encode_html CHANGING l_title.
    IF l_title IS INITIAL.
      l_title = '&#160;'.
    ENDIF.
    CONCATENATE
          '<th class="innerTableTH">' l_title '</th>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDLOOP.
  APPEND '</tr>' TO ct_html.

*content rows
  LOOP AT it_content ASSIGNING <ls_content>.
    l_tabix = sy-tabix.
    LOOP AT it_content_ext ASSIGNING <ls_content_ext>.
      IF sy-tabix = l_tabix.
        EXIT.
      ENDIF.
    ENDLOOP.

    APPEND '<tr>' TO ct_html.

    LOOP AT gt_table_structure ASSIGNING <ls_tabdef>
        WHERE id = l_tabid.
      CASE <ls_tabdef>-comparator.
        WHEN 'CO'.
          IF NOT l_tabcomp CO <ls_tabdef>-comp_value.
            CONTINUE.
          ENDIF.
      ENDCASE.
      CLEAR l_txt.
      CLEAR l_text.
      ASSIGN COMPONENT <ls_tabdef>-fieldname
          OF STRUCTURE <ls_content> TO <l_value>.
      IF NOT <l_value> IS ASSIGNED.
        ASSIGN COMPONENT <ls_tabdef>-fieldname
            OF STRUCTURE <ls_content_ext> TO <l_value>.
      ENDIF.
      IF <l_value> IS ASSIGNED.
        WRITE <l_value> TO l_txt.
        UNASSIGN <l_value>.
      ENDIF.
      l_text = l_txt.
      PERFORM encode_html CHANGING l_text.

      CLEAR l_link.
      IF NOT <ls_tabdef>-link_row IS INITIAL.
        ASSIGN COMPONENT <ls_tabdef>-link_row
            OF STRUCTURE <ls_content> TO <l_link>.
        IF NOT <l_link> IS ASSIGNED.
          ASSIGN COMPONENT <ls_tabdef>-link_row
              OF STRUCTURE <ls_content_ext> TO <l_link>.
        ENDIF.
        IF <l_link> IS ASSIGNED.
          WRITE <l_link> TO l_link.
          UNASSIGN <l_link>.
        ENDIF.
      ENDIF.

      CLEAR l_colored.
      IF NOT <ls_tabdef>-colored_row IS INITIAL.
        ASSIGN COMPONENT <ls_tabdef>-colored_row
            OF STRUCTURE <ls_content> TO <l_colored>.
        IF NOT <l_colored> IS ASSIGNED.
          ASSIGN COMPONENT <ls_tabdef>-colored_row
              OF STRUCTURE <ls_content_ext> TO <l_colored>.
        ENDIF.
        IF <l_colored> IS ASSIGNED.
          l_colored = <l_colored>.
          UNASSIGN <l_colored>.
        ENDIF.
      ENDIF.

      l_align = 'left'.
      CASE <ls_tabdef>-row_def.
        WHEN 'B'.
          l_align = 'center'.
          IF NOT l_text IS INITIAL.
            CONCATENATE
              '<input class="innerTableButton"'
              ' onclick="' l_link '"'
              ' value="' l_text '"/>'
              INTO l_text.
          ENDIF.
        WHEN 'C'.
          l_align = 'center'.
        WHEN 'F'.
          l_align = 'center'.
          CLEAR l_checked.
          IF l_text = abap_undefined.
            l_text = space.
          ELSE.
            IF l_text = abap_true.
              l_checked = ' checked="checked"'.
            ENDIF.
            CONCATENATE
              '<input class="innerTableFlag"'
              l_checked
              ' disabled="disabled" type="checkbox"'
              ' value="' l_text '"/>'
              INTO l_text.
          ENDIF.
        WHEN 'H'.
          l_align = 'left'.
          IF l_colored IS INITIAL.
            l_class = 'tableLink'.
          ELSE.
            l_class = 'tableLinkColored'.
          ENDIF.
          CONCATENATE
            '<a class="' l_class '" href="#"'
            ' onclick="' l_link '">'
            l_text
            '</a>'
            INTO l_text.
        WHEN 'I'.
          l_align = 'right'.
          l_int = l_text.
          l_text = l_int.
          CONDENSE l_text.
        WHEN 'L'.
          l_align = 'left'.
        WHEN 'R'.
          l_align = 'right'.
      ENDCASE.
      IF l_text IS INITIAL.
        l_text = '&#160;'.
      ENDIF.
      IF l_colored IS INITIAL.
        l_class = 'innerTableTD'.
      ELSE.
        l_class = 'innerTableTDColored'.
      ENDIF.
      CONCATENATE
        '<td class="' l_class '"'
        ' style="text-align:' l_align ';vertical-align:middle">'
          l_text
        '</td>'
          INTO ls_html.
      APPEND ls_html TO ct_html.
    ENDLOOP.
    APPEND '</tr>' TO ct_html.
  ENDLOOP.

  APPEND '</table>' TO ct_html.
ENDFORM.                    "html_add_tableNoDiv


*-----------------------------------------------------------------------
* form: html_add_tables
*-----------------------------------------------------------------------
FORM html_add_tables
  USING
    it_tables TYPE it_tables
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  ls_tables TYPE st_tables,
  lt_ti TYPE it_textinput,
  ls_ti TYPE st_textinput,
  l_enqmode TYPE char255,
  l_tabname TYPE char255.

  FIELD-SYMBOLS:
  <ls_tables> TYPE st_tables.

  READ TABLE it_tables INTO ls_tables
      WITH KEY primary = abap_true.
  WRITE ls_tables-enqmode TO l_enqmode.
  WRITE ls_tables-tabname TO l_tabname.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table class="titleTable">'
        '<tr>'
          '<td colspan="5">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  REFRESH lt_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_name.
  ls_ti-value = l_tabname.
  ls_ti-input = abap_true.
  APPEND ls_ti TO lt_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_lock_mode.
  ls_ti-value = l_enqmode.
  ls_ti-input = abap_true.
  APPEND ls_ti TO lt_ti.
  PERFORM html_add_box_textinputnodiv
    USING
      txt_primary_table
      lt_ti
    CHANGING
      ct_html.

  CONCATENATE
        '<tr><td colspan="5">&#160;</td></tr>'
        '<tr>'
          '<td>'
            '<table border="0" cellpadding="0" cellspacing="0"'
            ' class="box">'
              '<tr class="boxContent">'
                '<td class="boxContent">'
                  '<table class="boxName">'
                    '<tr>'
                      '<td>'
                        '<span>' txt_secondary_tables '</span>'
                      '</td>'
                    '</tr>'
                  '</table>'
                '</td>'
              '</tr>'
              '<tr class="boxContent">'
                '<td class="boxContent">'
                  '<table border="0" cellpadding="0" cellspacing="0"'
                  ' class="innerTable">'
                    '<tr>'
                      '<th class="innerTableTH"'
                      ' style="text-align:left">'
                        txt_name
                      '</th>'
                      '<th class="innerTableTH"'
                      ' style="text-align:left">'
                        txt_lock_mode
                      '</th>'
                    '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  LOOP AT it_tables ASSIGNING <ls_tables>
      WHERE primary = abap_false.
    WRITE <ls_tables>-enqmode TO l_enqmode.
    WRITE <ls_tables>-tabname TO l_tabname.
    CONCATENATE
                    '<tr>'
                      '<td class="innerTableTD">' l_tabname '</td>'
                      '<td class="innerTableTD">' l_enqmode '</td>'
                    '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDLOOP.
  CONCATENATE
                  '</table>'
                '</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_tables


*-----------------------------------------------------------------------
* form: html_add_tech_settings
*-----------------------------------------------------------------------
FORM html_add_tech_settings
  USING
    i_title_params TYPE string
    it_ti_params TYPE it_textinput
    i_title_buffer TYPE string
    it_access_buffer TYPE it_access
    i_title_buffer_type TYPE string
    it_ti_buffer_type_l TYPE it_textinput
    it_ti_buffer_type_r TYPE it_textinput
    it_ti_bottom TYPE it_textinput
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_title_params
      it_ti_params
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr><td>&#160;</td></tr>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box1rb_subbox2tinodiv
    USING
      i_title_buffer
      it_access_buffer
      i_title_buffer_type
      it_ti_buffer_type_l
      it_ti_buffer_type_r
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
        '<tr><td>&#160;</td></tr>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_textinputnodiv
    USING it_ti_bottom
    CHANGING ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_tech_settings


*-----------------------------------------------------------------------
* form: html_add_textInput
*-----------------------------------------------------------------------
FORM html_add_textinput
  USING
    it_ti TYPE it_textinput
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  PERFORM html_add_textinputnodiv
    USING
      it_ti
    CHANGING
      ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_textInput


*-----------------------------------------------------------------------
* form: html_add_textInputNoDiv
*-----------------------------------------------------------------------
FORM html_add_textinputnodiv
  USING
    it_ti TYPE it_textinput
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_first_row TYPE flag VALUE abap_true,
  ls_html TYPE string,
  ls_ti TYPE st_textinput,
  ls_ti2 TYPE st_textinput,
  l_has_description TYPE flag,
  l_description TYPE char255,
  l_name TYPE char255,
  l_name_suffix TYPE char255,
  l_value TYPE char255,
  l_value_text TYPE char255,
  l_value_ext TYPE char255,
  l_value_ext_text TYPE char255,
  l_value_class TYPE string,
  l_tabix TYPE i,
  l_colspan TYPE string,
  l_checked TYPE string.

  FIELD-SYMBOLS:
  <ls_ti> TYPE st_textinput.

  LOOP AT it_ti ASSIGNING <ls_ti>
      WHERE description <> space.
    l_has_description = abap_true.
    EXIT.
  ENDLOOP.

  APPEND '<table class="titleTable">' TO ct_html.

  LOOP AT it_ti INTO ls_ti
      WHERE flag_col <= 1.
    l_tabix = sy-tabix.
    WRITE ls_ti-description TO l_description.
    IF l_description IS INITIAL.
      l_description = '&#160;'.
    ENDIF.
    WRITE ls_ti-name TO l_name.
    IF l_name IS INITIAL.
      l_name = '&#160;'.
    ENDIF.
    WRITE ls_ti-name_suffix TO l_name_suffix.
    WRITE ls_ti-value TO l_value.
    IF l_value IS INITIAL.
      l_value = '&#160;'.
    ENDIF.
    WRITE ls_ti-value_text TO l_value_text.
    WRITE ls_ti-value_ext TO l_value_ext.
    WRITE ls_ti-value_ext_text TO l_value_ext_text.
    IF l_value_ext IS INITIAL.
      l_value_ext = '&#160;'.
    ENDIF.

    APPEND '<tr>' TO ct_html.
*   Space
    IF ls_ti-space = abap_true.
      CONCATENATE
                '<td colspan="4">'
                  '&#160;'
                '</td>'
          INTO ls_html.
      APPEND ls_html TO ct_html.
*   Flag
    ELSEIF ls_ti-flag = abap_true.
      CLEAR l_checked.
      IF l_value = abap_true.
        l_checked = ' checked="checked"'.
      ENDIF.
      CONCATENATE
                '<td colspan="5">'
                  '<table>'
                    '<tr>'
                      '<td>'
                        '<input class="innerTableFlag"'
                        l_checked
                        ' disabled="disabled" type="checkbox"'
                        ' value="' l_value '"/>'
                      '</td>'
                      '<td>' l_name '</td>'
          INTO ls_html.
      APPEND ls_html TO ct_html.
      l_tabix = l_tabix + 1.
*     a row can have multiple checkboxes
      LOOP AT it_ti INTO ls_ti2
          FROM l_tabix.
        IF ls_ti2-flag_col > 1.
          WRITE ls_ti2-name TO l_name.
          IF l_name IS INITIAL.
            l_name = '&#160;'.
          ENDIF.
          WRITE ls_ti2-value TO l_value.
          IF l_value IS INITIAL.
            l_value = '&#160;'.
          ENDIF.
          CLEAR l_checked.
          IF l_value = abap_true.
            l_checked = ' checked="checked"'.
          ENDIF.
          CONCATENATE
                      '<td>&#160;</td>'
                      '<td>'
                        '<input class="innerTableFlag"'
                        l_checked
                        ' disabled="disabled" type="checkbox"'
                        ' value="' l_value '"/>'
                      '</td>'
                      '<td>' l_name '</td>'
              INTO ls_html.
          APPEND ls_html TO ct_html.
        ELSE.
          EXIT.
        ENDIF.
      ENDLOOP.
      CONCATENATE
                    '</tr>'
                  '</table>'
                '</td>'
          INTO ls_html.
      APPEND ls_html TO ct_html.
*   Textinput
    ELSE.
      IF ls_ti-no_name = abap_false.
        IF l_name_suffix IS INITIAL.
          CONCATENATE
                    '<td class="titleTableText" colspan="2">'
                      l_name
                    '</td>'
              INTO ls_html.
        ELSE.
          CONCATENATE
                    '<td class="titleTableText">'
                      l_name
                    '</td>'
                    '<td class="titleTableText">'
                      l_name_suffix
                    '</td>'
              INTO ls_html.
        ENDIF.
        APPEND ls_html TO ct_html.
      ENDIF.
      IF ls_ti-has_value_ext = abap_true
      AND ls_ti-value_double_length = abap_false.
        l_colspan = '1'.
      ELSE.
        l_colspan = '3'.
      ENDIF.
      IF ls_ti-no_name = abap_true.
        l_colspan = l_colspan + 1.
      ENDIF.
      IF ls_ti-input = abap_true.
        l_value_class = ' class="titleTableDescr"'.
      ELSE.
        CLEAR l_value_class.
      ENDIF.
      CONCATENATE
                '<td ' l_value_class ' colspan="' l_colspan '">'
                  '<span>'
          INTO ls_html.
      APPEND ls_html TO ct_html.
      IF NOT l_value_text IS INITIAL.
        CONCATENATE
                    '<a href="#" onclick="return false;"'
                    ' title="' l_value_text '">'
                      l_value
                    '</a>'
            INTO ls_html.
        APPEND ls_html TO ct_html.
      ELSE.
        APPEND l_value TO ct_html.
      ENDIF.
      CONCATENATE
                  '</span>'
                '</td>'
          INTO ls_html.
      APPEND ls_html TO ct_html.
      IF ls_ti-has_value_ext = abap_true
      AND ls_ti-value_double_length = abap_false.
        IF ls_ti-value_ext_space = abap_true.
          CLEAR l_value_class.
        ENDIF.
        CONCATENATE
                '<td>&#160;</td>'
                '<td' l_value_class '>'
                  '<span>'
            INTO ls_html.
        APPEND ls_html TO ct_html.
        IF NOT l_value_ext_text IS INITIAL.
          CONCATENATE
                      '<a href="#" onclick="return false;"'
                      ' title="' l_value_ext_text '">'
                        l_value_ext
                      '</a>'
              INTO ls_html.
          APPEND ls_html TO ct_html.
        ELSE.
          APPEND l_value_ext TO ct_html.
        ENDIF.
        CONCATENATE
                  '</span>'
                '</td>'
            INTO ls_html.
        APPEND ls_html TO ct_html.
      ENDIF.
    ENDIF.
    IF l_has_description = abap_true.
      CONCATENATE
                '<td>' l_description '</td>'
          INTO ls_html.
      APPEND ls_html TO ct_html.
    ENDIF.
    APPEND '</tr>' TO ct_html.
  ENDLOOP.

  APPEND '</table>' TO ct_html.

ENDFORM.                    "html_add_textInputNoDiv


*-----------------------------------------------------------------------
* form: html_add_textInput_subBox
*-----------------------------------------------------------------------
FORM html_add_textinput_subbox
  USING
    it_ti TYPE it_textinput
    value(i_subbox_title)
    it_subbox_ti TYPE it_textinput
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_textinputnodiv
    USING
      it_ti
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
            '</tr>'
            '<tr>'
              '<td>&#160;</td>'
            '</tr>'
            '<tr>'
              '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_subbox_title
      it_subbox_ti
    CHANGING
      ct_html.

  APPEND '</td></tr></table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.


ENDFORM.                    "html_add_textInput_subBox


*-----------------------------------------------------------------------
* form: html_add_textInput_subBox
*-----------------------------------------------------------------------
FORM html_add_textinput_subboxes
  USING
    it_ti TYPE it_textinput
    value(i_subbox1_title)
    value(i_subbox1_name)
    it_subbox1 TYPE it_access
    value(i_subbox2_title)
    it_subbox2 TYPE it_textinput
    value(i_subbox3_title)
    it_subbox3 TYPE it_textinput
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table>'
        '<tr>'
          '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_textinputnodiv
    USING
      it_ti
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
            '</tr>'
            '<tr>'
              '<td>&#160;</td>'
            '</tr>'
            '<tr>'
              '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_radiobuttonsnodiv
    USING
      i_subbox1_title
      i_subbox1_name
      it_subbox1
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
            '</tr>'
            '<tr>'
              '<td>&#160;</td>'
            '</tr>'
            '<tr>'
              '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_subbox2_title
      it_subbox2
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
            '</tr>'
            '<tr>'
              '<td>&#160;</td>'
            '</tr>'
            '<tr>'
              '<td style="vertical-align:top">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_textinputnodiv
    USING
      i_subbox3_title
      it_subbox3
    CHANGING
      ct_html.

  APPEND '</td></tr></table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.


ENDFORM.                    "html_add_textInput_subBox


*-----------------------------------------------------------------------
* form: html_add_transaction
*-----------------------------------------------------------------------
FORM html_add_transaction
  USING
    is_tran TYPE st_transaction
    it_auth_value TYPE ANY TABLE
    it_defval_for TYPE it_textinput
    it_gui_support TYPE it_textinput
    it_defval TYPE ANY TABLE
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

*Transaction   begin
  CONCATENATE
      '<table>'
        '<tr>'
          '<td>'
            '<table>'
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_transaction_text
                '</td>'
                '<td class="titleTableDescr" colspan="4">'
                  is_tran-ttext
                '</td>'
              '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*Transaction - Dialog   begin
  IF is_tran-ttype = gc_tcode_dialog.
    CONCATENATE
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_program
                '</td>'
                '<td class="titleTableDescr" colspan="4">'
                  is_tran-pgmna
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_selection_screen
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  is_tran-dypno
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_authorization_object___1
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  is_tran-objct
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td colspan="4">'
        INTO ls_html.
    APPEND ls_html TO ct_html.

    PERFORM html_add_tablenodiv
      USING
        'TRAN_AUTHV'
        it_auth_value
        it_auth_value
      CHANGING
        ct_html.

    CONCATENATE
                '</td>'
              '</tr>'
              '<tr>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td>'
                  '<input '
        INTO ls_html.
    IF is_tran-trans_var = abap_true.
      CONCATENATE ls_html ' checked="checked"' INTO ls_html.
    ENDIF.
    CONCATENATE
        ls_html
                  ' class="innerTableFlag"'
                  ' disabled="disabled"'
                  ' type="checkbox"'
                  ' value="transvar"/>'
                '</td>'
                '<td colspan="5">'
                  '<span>' txt_maintenance_of_standard_tr '</span>'
                '</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
*Transaction - Dialog   end
*Transaction - Report   begin
  IF is_tran-ttype = gc_tcode_report.
    CONCATENATE
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_program
                '</td>'
                '<td class="titleTableDescr" colspan="4">'
                  is_tran-pgmna
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_selection_screen
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  is_tran-dypno
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_start_with_variant
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  is_tran-repo_vari
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_authorization_object___1
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  is_tran-objct
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td colspan="4">'
        INTO ls_html.
    APPEND ls_html TO ct_html.

    PERFORM html_add_tablenodiv
      USING
        'TRAN_AUTHV'
        it_auth_value
        it_auth_value
      CHANGING
        ct_html.

    CONCATENATE
                '</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
*Transaction - Report   end
*Transaction - Object   begin
  IF is_tran-ttype = gc_tcode_object.
    CONCATENATE
              '<tr>'
                '<td>'
                  '<input '
        INTO ls_html.
    IF is_tran-trframe = abap_true.
      CONCATENATE ls_html ' checked="checked"' INTO ls_html.
    ENDIF.
    CONCATENATE
        ls_html
                  ' class="innerTableFlag"'
                  ' disabled="disabled"'
                  ' type="checkbox"'
                  ' value="trframe"/>'
                '</td>'
                '<td colspan="2">'
                  '<span>'
                    txt_oo_transaction_model
                  '</span>'
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr><td colspan="6">&#160;</td></tr>'
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_class_name
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  is_tran-classname
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_method
                '</td>'
                '<td class="titleTableDescr" colspan="4">'
                  is_tran-method
                '</td>'
              '</tr>'
              '<tr>'
                '<td>'
                  '<input '
        INTO ls_html.
    IF is_tran-local = abap_true.
      CONCATENATE ls_html ' checked="checked"' INTO ls_html.
    ENDIF.
    CONCATENATE
        ls_html
                  ' class="innerTableFlag"'
                  ' disabled="disabled"'
                  ' type="checkbox"'
                  ' value="local"/>'
                '</td>'
                '<td>'
                  '<span>'
                    txt_local_in_program
                  '</span>'
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  is_tran-pgmna
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_authorization_object___1
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  is_tran-objct
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td colspan="4">'
        INTO ls_html.
    APPEND ls_html TO ct_html.

    PERFORM html_add_tablenodiv
      USING
        'TRAN_AUTHV'
        it_auth_value
        it_auth_value
      CHANGING
        ct_html.

    CONCATENATE
                '</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
*Transaction - Object   end
*Transaction - Variant   begin
  IF is_tran-ttype = gc_tcode_variant.
    CONCATENATE
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_transaction
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  is_tran-def_call_tcode
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td class="titleTableText" colspan="2">'
                  txt_transaction_variant
                '</td>'
                '<td class="titleTableDescr" colspan="2">'
                  is_tran-variant
                '</td>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
              '</tr>'
              '<tr>'
                '<td>&#160;</td>'
                '<td>&#160;</td>'
                '<td>'
                  '<input '
        INTO ls_html.
    IF is_tran-ind_vari = abap_true.
      CONCATENATE ls_html ' checked="checked"' INTO ls_html.
    ENDIF.
    CONCATENATE
        ls_html
                  ' class="innerTableFlag"'
                  ' disabled="disabled"'
                  ' type="checkbox"'
                  ' value="cross"/>'
                '</td>'
                '<td colspan="3">'
                  txt_cross_client
                '</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
*Transaction - Variant   end
  CONCATENATE
            '</table>'
          '</td>'
        '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*Transaction   end

*Default values for   begin
  IF is_tran-ttype = gc_tcode_parameter.
    CONCATENATE
        '<tr><td>&#160;</td></tr>'
        '<tr>'
          '<td>'
        INTO ls_html.
    APPEND ls_html TO ct_html.

    PERFORM html_add_box_textinputnodiv
    USING
      txt_default_values_for
      it_defval_for
    CHANGING
      ct_html.

    CONCATENATE
          '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
*Default values for   end

*Classification   begin
  CONCATENATE
        '<tr><td>&#160;</td></tr>'
        '<tr>'
          '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_begin
    USING
      txt_classification '1'
    CHANGING
      ct_html.

  APPEND '<table class="titleTable">' TO ct_html.

  IF is_tran-ttype = gc_tcode_parameter
  OR is_tran-ttype = gc_tcode_variant.
    CONCATENATE
              '<tr>'
                '<td>'
                  '<table class="titleTable">'
                    '<tr>'
                      '<td>'
                        '<input '
        INTO ls_html.
    IF is_tran-clf_inhe = abap_true.
      CONCATENATE ls_html ' checked="checked"' INTO ls_html.
    ENDIF.
    CONCATENATE
        ls_html
                        ' class="innerTableFlag"'
                        ' disabled="disabled"'
                        ' type="checkbox"'
                        ' value="inherit"/>'
                      '</td>'
                      '<td>'
                        '<span>'
                          txt_inherit_gui_attributes
                        '</span>'
                      '</td>'
                    '</tr>'
                  '</table>'
                '</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.

  CONCATENATE
              '<tr>'
                '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
**Transaction classification
  PERFORM html_add_box_begin
    USING
      txt_transaction_classification '1'
    CHANGING
      ct_html.

  CONCATENATE
                  '<table class="titleTable">'
                    '<tr>'
                      '<td>'
                        '<input '
      INTO ls_html.
  IF is_tran-clf_profi = abap_true.
    CONCATENATE ls_html ' checked="checked"' INTO ls_html.
  ENDIF.
  CONCATENATE
      ls_html
                        ' class="radio"'
                        ' disabled="disabled"'
                        ' name="tranclass"'
                        ' type="radio"'
                        ' value="profi"/>'
                      '</td>'
                      '<td colspan="2">'
                        '<span>'
                          txt_professional_user_transact
                        '</span>'
                      '</td>'
                      '<td colspan="3">&#160;</td>'
                    '</tr>'
                    '<tr>'
                      '<td>'
                        '<input '
      INTO ls_html.
  IF is_tran-clf_ewt = abap_true.
    CONCATENATE ls_html ' checked="checked"' INTO ls_html.
  ENDIF.
  CONCATENATE
      ls_html
                        ' class="radio"'
                        ' disabled="disabled"'
                        ' name="tranclass"'
                        ' type="radio"'
                        ' value="profi"/>'
                      '</td>'
                      '<td colspan="2">'
                        '<span>' txt_easy_web_transaction '</span>'
                      '</td>'
                      '<td>&#160;</td>'
                      '<td class="titleTableText">' txt_service '</td>'
                      '<td class="titleTableDescr">'
                        is_tran-clf_service
                      '</td>'
                    '</tr>'
                    '<tr>'
                      '<td>&#160;</td>'
                      '<td>'
                        '<input '
      INTO ls_html.
  IF is_tran-clf_pervas = abap_true.
    CONCATENATE ls_html ' checked="checked"' INTO ls_html.
  ENDIF.
  CONCATENATE
      ls_html
                        ' class="innerTableFlag"'
                        ' disabled="disabled"'
                        ' type="checkbox"'
                        ' value="pervasive"/>'
                      '</td>'
                      '<td><span>' txt_pervasive_enabled '</span></td>'
                      '<td>&#160;</td>'
                      '<td>&#160;</td>'
                      '<td>&#160;</td>'
                    '</tr>'
                  '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_end
    CHANGING
      ct_html.

  CONCATENATE
                '</td>'
              '</tr>'
              '<tr>'
                '<td>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
**GUI support
  PERFORM html_add_box_textinputnodiv
    USING
      txt_gui_support
      it_gui_support
    CHANGING
      ct_html.

  CONCATENATE
                '</td>'
              '</tr>'
            '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_box_end
    CHANGING
      ct_html.

  CONCATENATE
          '</td>'
        '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*Classification   end

*Default values - Parameter   begin
  IF is_tran-ttype = gc_tcode_parameter.
    CONCATENATE
        '<tr><td>&#160;</td></tr>'
        '<tr>'
          '<td>'
        INTO ls_html.
    APPEND ls_html TO ct_html.

    PERFORM html_add_box_begin
      USING
        txt_default_values '1'
      CHANGING
        ct_html.

    CONCATENATE
            '<table>'
              '<tr>'
                '<td>'
        INTO ls_html.
    APPEND ls_html TO ct_html.

    PERFORM html_add_tablenodiv
      USING
        'TRAN_DEFVA'
        it_defval
        it_defval
      CHANGING
        ct_html.

    CONCATENATE
                '</td>'
              '</tr>'
            '</table>'
        INTO ls_html.
    APPEND ls_html TO ct_html.

    PERFORM html_add_box_end
      CHANGING
        ct_html.

    CONCATENATE
          '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
*Default values - Parameter   end

  APPEND '</table>' TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_transaction


*-----------------------------------------------------------------------
* form: html_add_value_range
*-----------------------------------------------------------------------
FORM html_add_value_range
  USING
    it_value_range TYPE it_value_range
    value(i_id)
    value(i_on)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_ddtext TYPE char255,
  l_domvalue_h TYPE char255,
  l_domvalue_l TYPE char255.

  FIELD-SYMBOLS:
  <ls_value_range> TYPE st_value_range.

  PERFORM html_add_div_begin
    USING
      i_id
      i_on
    CHANGING
      ct_html.

  CONCATENATE
      '<table class="titleTable">'
        '<tr>'
          '<td>'
            '<table border="0" cellpadding="0" cellspacing="0"'
            ' class="innerTable">'
              '<tr>'
                '<th class="innerTableTHtop" colspan="2"'
                ' style="text-align:left">' txt_single_vars '</th>'
              '</tr>'
              '<tr>'
                '<th class="innerTableTH" style="text-align:left">'
                  txt_fix_val
                '</th>'
                '<th class="innerTableTH" style="text-align:left">'
                  txt_short_description___1
                '</th>'
              '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  LOOP AT it_value_range ASSIGNING <ls_value_range>
      WHERE domvalue_h = space.
    WRITE <ls_value_range>-ddtext TO l_ddtext.
    WRITE <ls_value_range>-domvalue_l TO l_domvalue_l.
    CONCATENATE
              '<tr>'
                '<td class="innerTableTD">' l_domvalue_l '</td>'
                '<td class="innerTableTD">' l_ddtext '</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDLOOP.

  CONCATENATE
            '</table>'
          '</td>'
        '</tr>'
        '<tr><td>&#160;</td></tr>'
        '<tr>'
          '<td>'
            '<table border="0" cellpadding="0" cellspacing="0"'
            ' class="innerTable">'
              '<tr>'
                '<th class="innerTableTHtop" colspan="3"'
                ' style="text-align:left">' txt_intervals '</th>'
              '</tr>'
              '<tr>'
                '<th class="innerTableTH" style="text-align:left">'
                  txt_lower_limit
                '</th>'
                '<th class="innerTableTH" style="text-align:left">'
                  txt_upperlimit
                '</th>'
                '<th class="innerTableTH" style="text-align:left">'
                  txt_short_description___1
                '</th>'
              '</tr>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  LOOP AT it_value_range ASSIGNING <ls_value_range>
      WHERE domvalue_h <> space.
    WRITE <ls_value_range>-ddtext TO l_ddtext.
    WRITE <ls_value_range>-domvalue_h TO l_domvalue_h.
    WRITE <ls_value_range>-domvalue_l TO l_domvalue_l.
    CONCATENATE
              '<tr>'
                '<td class="innerTableTD">' l_domvalue_l '</td>'
                '<td class="innerTableTD">' l_domvalue_h '</td>'
                '<td class="innerTableTD">' l_ddtext '</td>'
              '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDLOOP.

  CONCATENATE
            '</table>'
          '</td>'
        '</tr>'
      '</table>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

  PERFORM html_add_div_end
    CHANGING
      ct_html.

ENDFORM.                    "html_add_value_range
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_HTML_BASE                              *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* html_base
*-----------------------------------------------------------------------
FORM html_base.
  PERFORM html_base_about.
  PERFORM html_base_gpl.
  PERFORM html_base_index.
  PERFORM html_base_default_main.
ENDFORM.                    "html_base


*-----------------------------------------------------------------------
* html_base_about
*-----------------------------------------------------------------------
FORM html_base_about.

  DATA:
  ls_html TYPE string,
  lt_html TYPE it_string,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt,
  l_gpl TYPE string,
  l_link TYPE string.

  PERFORM get_spras USING sy-langu l_laiso l_sptxt.

  l_gpl = txt_product_under_gpl.
  CONCATENATE
    '<a href="GPL.' gc_extension_htm '"'
    ' onclick="parent.openDropDownLink(''gpl'');return false">'
    'GNU General Public License'
    '</a>'
    INTO l_link.
  PERFORM replace_single
    USING '#GPL#' l_link
    CHANGING l_gpl.

  CONCATENATE
    '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
    ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  CONCATENATE
    '<html xmlns="http://www.w3.org/1999/xhtml"'
    ' xml:lang="' l_laiso '" lang="' l_laiso '">'
      '<head>'
        '<title>'
          '&#x53;&#x6f;&#x66;&#x74;&#x43;&#x6f;&#x70;&#x79;'
        '</title>'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  PERFORM html_add_meta CHANGING lt_html.
  APPEND '<script type="text/javascript"><!--' TO lt_html.
  CONCATENATE
    'if(top==self){'
      'window.location.href="../index.' gc_extension_htm '";'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  APPEND '//--></script>' TO lt_html.
  APPEND '<style type="text/css">' TO lt_html.
  CONCATENATE
    'h1 {'
      'color:black;'
      'font-family:arial;'
      'font-size:30px;'
      'font-style:normal;'
      'font-weight:bold;'
      'text-decoration:none;'
    '}'
    'table {'
      'width:100%;'
    '}'
    'td {'
      'font-family:arial;'
      'font-size:12px;'
      'vertical-align:middle;'
      'width:100%;'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  CONCATENATE
        '</style>'
      '</head>'
      '<body>'
        '<table>'
          '<tr>'
            '<td>'
              '<h1>'
                '&#x53;&#x6f;&#x66;&#x74;&#x43;&#x6f;&#x70;&#x79;'
              '</h1>'
            '</td>'
          '</tr>'
          '<tr>'
            '<td>'
              txt_version ':&#160;' gc_version
            '</td>'
          '</tr>'
          '<tr>'
            '<td>'
              '&#160;'
            '</td>'
          '</tr>'
          '<tr>'
            '<td>'
              '&#xa9;2008-' gc_version+0(4) ' globalBIT, LLC.'
              '<br/>'
              txt_all_rights_reserved
            '</td>'
          '</tr>'
          '<tr>'
            '<td>'
              '&#160;'
            '</td>'
          '</tr>'
          '<tr>'
            '<td>'
              l_gpl
            '</td>'
          '</tr>'
        '</table>'
      '</body>'
    '</html>'
    INTO ls_html.
  APPEND ls_html TO lt_html.

  PERFORM download
    USING
      lt_html
      'MENU'
      'HELP'
      'about'
      gc_extension_htm
      abap_false.
ENDFORM.                    "html_base_about


*-----------------------------------------------------------------------
* html_base_default_main
*-----------------------------------------------------------------------
FORM html_base_default_main.

  DATA:
  ls_html TYPE string,
  lt_html TYPE it_string,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt.

  PERFORM get_spras USING sy-langu l_laiso l_sptxt.

  CONCATENATE
    '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
    ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  CONCATENATE
    '<html xmlns="http://www.w3.org/1999/xhtml"'
    ' xml:lang="' l_laiso '" lang="' l_laiso '">'
      '<head>'
        '<title>'
          '&#x53;&#x6f;&#x66;&#x74;&#x43;&#x6f;&#x70;&#x79;'
        '</title>'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  PERFORM html_add_meta CHANGING lt_html.
  APPEND '<script type="text/javascript"><!--' TO lt_html.
  CONCATENATE
    'if(top==self){'
      'window.location.href="index.' gc_extension_htm '";'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  APPEND '//--></script>' TO lt_html.
  APPEND '<style type="text/css">' TO lt_html.
  CONCATENATE
    'h1{'
      'color:black;'
      'font-family:arial;'
      'font-size:30px;'
      'font-style:normal;'
      'font-weight:bold;'
      'text-decoration:none;'
    '}'
    'table{'
      'height:100%;'
      'width:100%;'
    '}'
    'td{'
      'height:100%;'
      'text-align:center;'
      'vertical-align:middle;'
      'width:100%;'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  CONCATENATE
        '</style>'
      '</head>'
      '<body>'
        '<table>'
          '<tr>'
            '<td>'
              '<h1>'
                '&#x53;&#x6f;&#x66;&#x74;&#x43;&#x6f;&#x70;&#x79;'
              '</h1>'
            '</td>'
          '</tr>'
        '</table>'
      '</body>'
    '</html>'
    INTO ls_html.
  APPEND ls_html TO lt_html.

  PERFORM download
    USING
      lt_html
      space
      space
      'default'
      gc_extension_htm
      abap_false.
ENDFORM.                    "html_base_default_main


*-----------------------------------------------------------------------
* GPL
*-----------------------------------------------------------------------
FORM html_base_gpl.

  DATA:
  l_title TYPE string,
  lt_html TYPE it_string.

*HTML
  PERFORM html_main_popupheader
    USING
      'GNU General Public License'
    CHANGING
      lt_html.
* Content
  PERFORM lic_gpl_html
    CHANGING
      l_title
      lt_html.
* Footer
  PERFORM html_main_popupfooter
    CHANGING lt_html.
*Download
  PERFORM download
    USING
      lt_html
      'MENU'
      'HELP'
      'GPL'
      gc_extension_htm
      abap_false.

ENDFORM.                    "html_base_gpl


*-----------------------------------------------------------------------
* html_base_index
*-----------------------------------------------------------------------
FORM html_base_index.

  DATA:
  ls_html TYPE string,
  lt_html TYPE it_string,
  lt_prop TYPE it_prop,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt,
  l_height TYPE string,
  l_width TYPE string,
  l_props TYPE string,
  l_uri_props TYPE string.

  CONSTANTS:
  l_c_info_height TYPE i VALUE 400,
  l_c_info_width TYPE i VALUE 600.

  FIELD-SYMBOLS:
  <ls_prop> TYPE st_prop.

  PERFORM get_spras USING sy-langu l_laiso l_sptxt.

  CONCATENATE
    '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"'
    ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  CONCATENATE
    '<html xmlns="http://www.w3.org/1999/xhtml"'
    ' xml:lang="' l_laiso '" lang="' l_laiso '">'
      '<head>'
        '<title>'
          '&#x53;&#x6f;&#x66;&#x74;&#x43;&#x6f;&#x70;&#x79;'
        '</title>'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  PERFORM html_add_meta CHANGING lt_html.
  APPEND '<script type="text/javascript">' TO lt_html.
  APPEND '<!--' TO lt_html.
*global attributes
  CONCATENATE
    'var popupCallbacks=new Array();'
    'var popupClicked="";'
    'var popupMouseX=0;'
    'var popupMouseY=0;'
    'var popupValues=new Array();'
    'var resizeMouseX=0;'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*props
  PERFORM get_props CHANGING lt_prop.
  ls_html = 'var props=new Array(new Array("page","index")'.
  l_props = 'page=index'.
  LOOP AT lt_prop ASSIGNING <ls_prop>.
    CONCATENATE ls_html
      ',new Array("' <ls_prop>-name '","' <ls_prop>-value '")'
      INTO ls_html.
    CONCATENATE l_props '&amp;' <ls_prop>-name '=' <ls_prop>-value
      INTO l_props.
  ENDLOOP.
  l_uri_props = l_props.
  PERFORM encode_uri CHANGING l_uri_props.
  CONCATENATE ls_html ');' INTO ls_html.
  APPEND ls_html TO lt_html.
*addFrame
  CONCATENATE
    'function addFrame() {'
      'var mySearch=window.location.search;'
      'if(mySearch.length>10){'
        'if(mySearch.indexOf("?")>=0){'
          'mySearch=mySearch.substring('
            'mySearch.indexOf("?")+1,'
            'mySearch.length'
          ');'
        '}'
        'var myProps=mySearch.split("&");'
        'var myPgmid="";'
        'var myObject="";'
        'var myObjName="";'
        'for(var i=0;i<myProps.length;i++){'
          'var myProp=myProps[i].split("=");'
          'switch(myProp[0]){'
            'case "pgmid":'
              'myPgmid=myProp[1];'
              'break;'
            'case "object":'
              'myObject=myProp[1];'
              'break;'
            'case "obj_name":'
              'myObjName=myProp[1];'
              'break;'
          '}'
        '}'
        'showObject(myPgmid+"_"+myObject, myObjName);'
      '}'
      'else{'
        'showObject();'
      '}'            '}'
      INTO ls_html.
  APPEND ls_html TO lt_html.
*closeDropDownMenus()
  CONCATENATE
    'function closeDropDownMenus(){'
      'var elem=document.getElementById("tm_help");'
      'if(elem) {'
        'elem.style.display="none";'
        'elem.style.visibility="hidden";'
      '}'
      'var elem=document.getElementById("tm_menu");'
      'if(elem) {'
        'elem.style.display="none";'
        'elem.style.visibility="hidden";'
      '}'
      'elem=document.getElementById("tm_system");'
      'if(elem) {'
        'elem.style.display="none";'
        'elem.style.visibility="hidden";'
      '}'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*findLinkElem
  CONCATENATE
    'function findLinkElem(objID, objName){'
      'var aElems=document.getElementsByClassName("leafLink");'
      'for(var i=0; i<aElems.length; ++i){'
        'if(aElems[i].href.endsWith(objID+"/"+objName+".htm")){'
          'return aElems[i];'
        '}'
      '}'
      'return null;'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*getLinks
  CONCATENATE
    'function getLinks(id) {'
      'var links;'
      'switch(id){'
        'case "tm_menu":'
          'links=new Array('
            'new Array('
              '"first_page",'
              '"menu_first_page",'
              '"' txt_first_page '",'
              '"",""'
            ')'
          ');'
          'break;'
        'case "tm_system":'
          'links=new Array('
            'new Array('
              '"status",'
              '"system_status",'
              '"' txt_status '",'
              '"",""'
            '),'
            'new Array('
              '"kernel",'
              '"system_kernel",'
              '"' txt_kernel_information___1 '",'
              '"",""'
            '),'
            'new Array('
              '"component",'
              '"system_component",'
              '"' txt_component_information '",'
              '"",""'
            ')'
          ');'
          'break;'
        'case "tm_help":'
          'links=new Array('
            'new Array('
              '"about",'
              '"help_about",'
              '"' txt_about '",'
              '"",""'
            '),'
            'new Array('
              '"updates",'
              '"popup",'
              '"' txt_updates '",'
              '"http://www.globalbit.org/sc/updates?'
              'langu=' l_laiso '&#38;scver=' gc_version '",'
              '"' txt_updates '"'
            '),'
            'new Array('
              '"globalbit",'
              '"newWindow",'
              '"globalBIT",'
              '"http://www.globalbit.org",""'
            ')'
          ');'
          'break;'
        'default:'
          'links=new Array();'
      '}'
      'return links;'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*getProps
  CONCATENATE
    'function getProps(){'
      'return props;'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*init
  CONCATENATE
    'function init(){'
      'addFrame();'
      'makeFrameSize();'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*makeFrameSize
  CONCATENATE
    'function makeFrameSize(){'
      'var capElem=document.getElementById("cap");'
      'var contentElem=document.getElementById("content");'
      'var contentDivElem=document.getElementById("contentDiv");'
      'var linksElem=document.getElementById("links");'
      'var scElem=document.getElementById("sc");'
      'var scResizerElem=document.getElementById("scResizer");'
      'var winHeight=window.innerHeight;'
      'var winWidth=window.innerWidth;'
      'if(winHeight<4){winHeight=4;}'
      'if(winWidth<4){winWidth=4;}'
      'var capHeight=capElem.offsetHeight;'
      'var linksWidth=linksElem.offsetWidth;'
      'if(linksWidth+2>winWidth){'
        'linksWidth=winWidth-2;'
        'linksElem.style.width=winWidth-2 + "px";'
        'scResizerElem.style.left=winWidth-4 + "px";'
      '}'
      'var scHeightNew=winHeight-capHeight;'
      'var contentWidthNew=winWidth-linksWidth;'
      'scResizerElem.style.top=capHeight+"px";'
      'scElem.style.height=scHeightNew+"px";'
      'contentDivElem.style.height=scHeightNew+"px";'
      'contentElem.style.height=scHeightNew+"px";'
      'linksElem.style.height=scHeightNew+"px";'
      'scResizerElem.style.height=scHeightNew+"px";'
      'scElem.style.width=winWidth+"px";'
      'contentDivElem.style.width=contentWidthNew+"px";'
      'contentElem.style.width=contentWidthNew+"px";'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*openDropDownLink
  CONCATENATE
    'function openDropDownLink(elemId,url,title){'
      'closeDropDownMenus();'
      'switch(elemId) {'
        'case "help_about":'
          'showMenuObject('
            '"MENU_HELP/about.' gc_extension_htm '",'
            '"' txt_about '"'
          ');'
          'break;'
        'case "menu_first_page":'
          'showObject();'
          'break;'
        'case "gpl":'
          'showMenuObject('
            '"MENU_HELP/GPL.' gc_extension_htm '",'
            '"GNU General Public License"'
          ');'
          'break;'
        'case "newWindow":'
          'window.open(url);'
          'break;'
        'case "popup":'
          'showMenuObject(url,title);'
          'break;'
        'case "system_component":'
          'showMenuObject('
            '"MENU_SYSTEM/COMPONENT.' gc_extension_htm '",'
            '"' txt_system ':&#160;'
            txt_component_information '"'
          ');'
          'break;'
        'case "system_kernel":'
          'showMenuObject('
            '"MENU_SYSTEM/KERNEL.' gc_extension_htm '",'
            '"' txt_system ':&#160;'
            txt_kernel_information___1 '"'
          ');'
          'break;'
        'case "system_status":'
          'showMenuObject('
            '"MENU_SYSTEM/STATUS.' gc_extension_htm '",'
            '"' txt_system ':&#160;' txt_status '"'
          ');'
          'break;'
      '}'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*postResizeSc
  CONCATENATE
    'function postResizeSc(){'
      'resizeMouseX=0;'
      'document.onmousemove=null;'
      'document.onmouseup=null;'
      'var linksElem=document.getElementById("links");'
      'var scResizerElem=document.getElementById("scResizer");'
      'scResizerElem.style.width="4px";'
      'scResizerElem.style.left = linksElem.offsetWidth-2 + "px";'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*preResizeSc
  CONCATENATE
    'function preResizeSc(event){'
      'if(event){'
        'resizeMouseX=event.layerX;'
      '}'
      'var scResizerElem=document.getElementById("scResizer");'
      'scResizerElem.style.left="0px";'
      'scResizerElem.style.width=window.innerWidth+"px";'
      'document.onmousemove=resizeSc;'
      'document.onmouseout=postResizeSc;'
      'document.onmouseup=postResizeSc;'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*rebuildMenu
  CONCATENATE
    'function rebuildMenu(id,links){'
      'var elem = document.getElementById(id);'
      'if(elem == null){'
        'return;'
      '}'
      'var content;'
      'for(var i=0; i<links.length; i++){'
        'content += '''
          '<tr>'
            '<td class="topmenu_dropdown_td">'
              '<a class="topmenu_dropdown_link"'
              ' href="#" onclick="'
              'openDropDownLink(''+"''"+links[i][1]+"'',''"'
              '+links[i][3]+"'',''"+links[i][4]+"''"+'');'
              'return false">'
              '''+links[i][2]+'''
            '<''+''/td>'
          '<''+''/tr>'';'
      '}'
      'elem.getElementsByTagName("table")[0].innerHTML'
      ' = content;'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*resizeSc
  CONCATENATE
    'function resizeSc(event){'
      'var posX=event.pageX-resizeMouseX;'
      'if(posX<2){'
        'posX=2;'
      '}'
      'if(posX>window.innerWidth-2){'
        'posX=window.innerWidth-2;'
      '}'
      'var contentWidthNew=window.innerWidth-posX;'
      'var contentElem=document.getElementById("content");'
      'var contentDivElem=document.getElementById("contentDiv");'
      'var linksElem=document.getElementById("links");'
      'linksElem.style.width=posX+"px";'
      'contentDivElem.style.width=contentWidthNew+"px";'
      'contentElem.style.width=contentWidthNew+"px";'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*setObjectTitle
  CONCATENATE
    'function setObjectTitle(objID, objName){'
      'var objIDarr;'
      'var pgmid="";'
      'var object="";'
      'var title="SoftCopy";'
      'var name="";'
      'var ppID="";'

      'if(objID!=null){'
        'objIDarr=objID.split("_");'
        'if(objIDarr.length>1){'
          'pgmid=objIDarr[0];'
          'object=objIDarr[1];'

          'aElem=findLinkElem(objID, objName);'
          'if(aElem!=null){'
            'name=aElem.innerHTML;'
          '}'
        '}'
      '}'



      'switch(pgmid){'
        'case "R3TR":'
          'switch(object){'
            'case "CLAS":'
              'title="' tpt_seo_clas '";'
              'break;'
            'case "DOMA":'
              'title="' tpt_ddic_doma '";'
              'break;'
            'case "DTEL":'
              'title="' tpt_ddic_dtel '";'
              'break;'
            'case "ENQU":'
              'title="' tpt_ddic_enqu '";'
              'break;'
            'case "FUGR":'
              'ppID=aElem.parentElement.parentElement.id;'
              'if(ppID="R3TR_FUGR"){'
                'title="' tpt_fugr_fugr '";'
              '}'
              'else if(ppID.startsWith("fugr_fuba")){'
                'title="' tpt_fugr_fuba '";'
              '}'
              'else if(ppID.startsWith("fugr_scr")){'
                'title="' tpt_fugr_scr '";'
              '}'
              'else if(ppID.startsWith("fugr_incl")){'
                'title="' tpt_fugr_incl '";'
              '}'
              'break;'
            'case "INTF":'
              'title="' tpt_seo_intf '";'
              'break;'
            'case "MSAG":'
              'title="' tpt_msag '";'
              'break;'
            'case "PARA":'
              'title="' tpt_para '";'
              'break;'
            'case "PROG":'
              'ppID=aElem.parentElement.parentElement.id;'
              'if(ppID="prog_1"){'
                'title="' tpt_prog_repo '";'
              '}'
              'else if(ppID="prog_I"){'
                'title="' tpt_prog_incl '";'
              '}'
              'break;'
            'case "SHLP":'
              'title="' tpt_ddic_shlp '";'
              'break;'
            'case "SUSO":'
              'title="' tpt_tobj '";'
              'break;'
            'case "TABL":'
              'ppID=aElem.parentElement.parentElement.id;'
              'if(ppID="R3TR_TABL_2"){'
                'title="' tpt_ddic_tabl '";'
              '}'
              'else if(ppID="R3TR_TABL_VIEWAPPEND"){'
                'title="' tpt_ddic_stru '";'
              '}'
              'break;'
            'case "TRAN":'
              'title="' tpt_tran '";'
              'if(aElem.id==null || aElem.id==""){'
              '}'
              'else if(aElem.id.startsWith("R3TR_TRAN_'
                  gc_tcode_dialog '")){'
                'title="' tpt_tran_dialog '";'
              '}'
              'else if(aElem.id.startsWith("R3TR_TRAN_'
                  gc_tcode_object '")){'
                'title="' tpt_tran_obj '";'
              '}'
              'else if(aElem.id.startsWith("R3TR_TRAN_'
                  gc_tcode_parameter '")){'
                'title="' tpt_tran_param '";'
              '}'
              'else if(aElem.id.startsWith("R3TR_TRAN_'
                  gc_tcode_report '")){'
                'title="' tpt_tran_repo '";'
              '}'
              'else if(aElem.id.startsWith("R3TR_TRAN_'
                  gc_tcode_variant '")){'
                'title="' tpt_tran_vari '";'
              '}'
              'break;'
            'case "TTYP":'
              'title="' tpt_ddic_ttyp '";'
              'break;'
            'case "TYPE":'
              'title="' tpt_ddic_type '";'
              'break;'
            'case "VIEW":'
              'title="' tpt_ddic_view '";'
              'break;'
            'case "WAPA":'
              'title="' tpt_o2_wapa '";'
              'if(aElem.id==null || aElem.id==""){'
              '}'
              'else if(aElem.id.startsWith("bsp")){'
                'title="' txt_page '";'
              '}'
              'else if(aElem.id.startsWith("ctrl")){'
                'title="' tpt_o2_wapa_ctrl '";'
              '}'
              'else if(aElem.id.startsWith("incl")){'
                'title="' txt_page '";'
              '}'
              'else if(aElem.id.startsWith("mime")){'
                'title="' tpt_o2_wapa_page '";'
              '}'
              'else if(aElem.id.startsWith("view")){'
                'title="' tpt_o2_wapa_page '";'
              '}'
              'break;'
            'case "WTAG":'
              'title="' tpt_o2_wtag '";'
              'break;'
            'case "XSLT":'
              'title="' tpt_o2_xslt '";'
              'break;'
          '}'
          'break;'
      '}'
      'setTitle(title.replace("#NAME_VALUE#", name));'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*setTitle
  CONCATENATE
    'function setTitle(theTitle){'
      'closeDropDownMenus();'
      'var elem;'
      'var myCaption;'
      'var myTitle;'
      'myTitle="SoftCopy";'
      'if(theTitle==null || theTitle==""){'
        'myCaption = myTitle;'
      '}'
      'else {'
        'myCaption=theTitle;'
        'myTitle+=" - "+theTitle;'
      '}'
      'document.title=myTitle;'
      'elem=document.getElementById("title");'
      'elem.innerHTML=myCaption;'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*showMenuObject
  l_height = l_c_info_height.
  CONDENSE l_height.
  l_width = l_c_info_width.
  CONDENSE l_width.
  CONCATENATE
    'function showMenuObject(url, caption){'
      'closeDropDownMenus();'
      'var content=''<iframe frameborder="0"'
        ' height="' l_height '"'
        ' id="infoscroll" scrolling="auto"'
        ' src="''+url+''"'
        ' width="' l_width '"><''+''/iframe>'';'
      'displayPopupLayer("info",caption,content);'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*showObject
  CONCATENATE
    'function showObject(objID, objName, target, caption){'
      'var src="default.htm";'
      'if(objName!=null){'
        'src=objID+"/"+objName+".htm";'
      '}'
      'if(target=="POPUP"){'
        'showMenuObject(src,caption);'
      '}'
      'else{'
        'var height=400;'
        'var width=400;'
        'var contentElem=document.getElementById("content");'
        'if(contentElem){'
          'height=contentElem.offsetHeight;'
          'width=contentElem.offsetWidth;'
        '}'
        'document.getElementById("contentDiv").innerHTML'
        '=''<iframe class="content" frameborder="0" id="content"'
        ' name="content" scrolling="auto" src="''+src+''"'
        ' style="height:''+height+''px;width:''+width+''px">'
        '</iframe>'';'
        'setObjectTitle(objID, objName);'
      '}'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*toggleDropDown
  CONCATENATE
    'function toggleDropDown(elemId) {'
      'var elem=document.getElementById(elemId);'
      'if(elem==null){'
        'return;'
      '}'
      'var isOpen=(elem.style.visibility=="visible");'
      'closeDropDownMenus();'
      'if(!isOpen) {'
        'elem.style.top="19px";'
        'elem.style.visibility="visible";'
        'elem.style.display="block";'
      '}'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*toggleVisibility
  CONCATENATE
    'function toggleVisibility(elemID){'
      'try{'
        'if(elemID==null)'
          'return false;'
        'elem=document.getElementById(elemID);'
        'if(elem==null)'
          'return false;'
        'if(elem.style.visibility==null'
        ' || elem.style.visibility==""'
        ' || elem.style.visibility=="hidden"){'
          'elem.style.visibility="visible";'
          'elem.style.display="block";'
        '}'
        'else{'
          'elem.style.visibility="hidden";'
          'elem.style.display="none";'
        '}'
      '}'
      'catch(e){}'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*popup
  PERFORM html_base_popup_js CHANGING lt_html.
  APPEND '//-->' TO lt_html.
  APPEND '</script>' TO lt_html.
*CSS
  APPEND '<style type="text/css">' TO lt_html.
  CONCATENATE
    'body{'
      'margin-left:0px;'
      'margin-top:0px;'
      'margin-right:0px;'
      'margin-bottom:0px;'
      'overflow:hidden;'
    '}'
    'iframe{'
      'margin-left:0px;'
      'margin-top:0px;'
      'margin-right:0px;'
      'margin-bottom:0px;'
    '}'
    'li{'
      'color:black;'
      'font-family:arial;'
      'font-size:10px;'
      'font-style:normal;'
      'font-weight:normal;'
      'text-decoration:none;'
    '}'
    'ul{'
      'margin-left:15px;'
      'padding-left:0px;'
    '}'
    'ul ul * ul{'
      'display:none;'
      'visibility:hidden;'
    '}'
    'table{'
      'border:0;'
      'margin:0;'
      'padding:0;'
      'spacing:0;'
    '}'
    'td{'
      'border:0;'
      'margin:0;'
      'padding:0;'
      'spacing:0;'
    '}'
    'tr{'
      'border:0;'
      'margin:0;'
      'padding:0;'
      'spacing:0;'
    '}'
    '.cap{'
      'border-bottom:1px solid #3a3d3a;'
      'height:56px;'
      'width:100%;'
    '}'
    '.content{'
      'float:left'
    '}'
    '.contentDiv{'
      'float:left'
    '}'
    '.info{'
      'color:#0000ff !important;'
      'font-family:arial;'
      'font-size:10px;'
      'font-style:normal;'
      'text-decoration:none;'
      'vertical-align:top;'
    '}'
    '.leaf{'
    '}'
    '.leafLink{'
      'color:#666666 !important;'
      'font-family:arial;'
      'font-size:10px;'
      'font-style:normal;'
      'font-weight:normal;'
      'text-decoration:none;'
    '}'
    '.node{'
    '}'
    '.nodeLink{'
      'color:black;'
      'font-family:arial;'
      'font-size:10px;'
      'font-style:normal;'
      'font-weight:normal;'
      'text-decoration:none;'
    '}'
    '.nodeLink:active{'
      'color:darkred;'
    '}'
    '.nodeLink:focus{'
      'color:darkred;'
    '}'
    '.nodeLink:hover{'
      'color:red'
    '}'
    '.nodeLink:link{'
      'color:black;'
    '}'
    '.nodeLink:visited{'
      'color:black;'
    '}'
    '.links{'
      'float:left;'
      'height:400px;'
      'margin-bottom:0px;'
      'margin-left:0px;'
      'margin-right:0px;'
      'margin-top:0px;'
      'overflow:scroll;'
      'scrolling:auto;'
      'width:200px;'
    '}'
    '.scResizer{'
      'cursor:col-resize;'
      'height:400px;'
      'left:198px;'
      'position:absolute;'
      'top:57px;'
      'user-select:none;'
      'width:4px;'
      'z-index:10;'
    '}'
    '.topmenu{'
      'background-color:#102873;'
      'border-bottom:1px solid #4a5973;'
      'color:#9ca6c5;'
      'font-family:arial;'
      'font-size:12px;'
      'font-style:normal;'
      'font-weight:normal;'
      'height:14px;'
      'padding-left:10px;'
      'text-align:left;'
      'text-decoration:none;'
      'vertical-align:middle;'
    '}'
    '.topmenu_dropdown{'
      'border-bottom:1px solid #3a3d3a;'
      'border-left:1px solid #a59e94;'
      'border-right:1px solid #3a3d3a;'
      'border-top:1px solid #a59e94;'
      'display:none;'
      'position:absolute;'
      'visibility:hidden;'
      'z-index:80;'
    '}'
    '.topmenu_dropdown_tab{'
      'border-bottom:1px solid #cecabd;'
      'border-left:1px solid #ffffef;'
      'border-right:1px solid #cecabd;'
      'border-top:1px solid #cecabd;'
    '}'
    '.topmenu_dropdown_td{'
      'background-color:#f7f3e6;'
      'border:1px solid #f7f3e6;'
      'color:#000000;'
      'font-family:arial;'
      'font-size:12px;'
      'font-style:normal;'
      'font-weight:normal;'
      'height:16px;'
      'padding-left:5px;'
      'padding-right:5px;'
      'text-align:left;'
      'text-decoration:none;'
      'vertical-align:middle;'
    '}'
    '.topmenu_dropdown_td:hover{'
      'background-color:#cecabd;'
      'border-bottom:1px solid #ffffef;'
      'border-left:1px solid #f7f3e6;'
      'border-right:1px solid #c5c2b5;'
      'border-top:1px solid #73716b;'
    '}'
    '.topmenu_dropdown_link{'
      'color:#000000;'
      'font-family:arial;'
      'font-size:12px;'
      'font-style:normal;'
      'font-weight:normal;'
      'text-align:left;'
      'text-decoration:none;'
      'vertical-align:middle;'
    '}'
    '.topmenu_link{'
      'color:#9ca6c5;'
      'font-family:arial;'
      'font-size:12px;'
      'font-style:normal;'
      'font-weight:normal;'
      'text-align:left;'
      'text-decoration:none;'
      'vertical-align:middle;'
    '}'
    '.topmenu_link:hover{'
      'color:#ffffff;'
    '}'
    '.topmenu_tab{'
      'background-color:#102873;'
      'color:#9ca6c5;'
      'font-family:arial;'
      'font-size:12px;'
      'font-style:normal;'
      'font-weight:normal;'
      'height:14px;'
      'padding-left:10px;'
      'text-align:left;'
      'text-decoration:none;'
      'vertical-align:middle;'
    '}'
    '.topmenu_td{'
      'color:#9ca6c5;'
      'font-family:arial;'
      'font-size:12px;'
      'font-style:normal;'
      'font-weight:normal;'
      'padding-right:10px;'
      'text-align:left;'
      'text-decoration:none;'
      'vertical-align:middle;'
    '}'
    '.toptitle{'
      'border-bottom:4px solid #ded7c5;'
      'border-top:4px solid #bdbebd;'
      'color:#5a699c;'
      'font-family:arial;'
      'font-size:20px;'
      'font-style:italic;'
      'font-weight:bold;'
      'height:32px;'
      'padding-left:10px;'
      'text-align:left;'
      'text-decoration:none;'
      'vertical-align:middle;'
    '}'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  PERFORM html_base_popup_css CHANGING lt_html.
  CONCATENATE
          '</style>'
        '</head>'
        '<body onload="init()">'
          '<table border="0" cellpadding="1" cellspacing="0"'
          ' class="cap" id="cap">'
* Top Menu
            '<tr>'
              '<td class="topmenu">'
                '<table border="0" cellpadding="0" cellspacing="0"'
                ' class="topmenu_tab">'
                  '<tr id="tm">'
*   Menu
                    '<td class="topmenu_td">'
                      '<a class="topmenu_link" href="#"'
                      ' onclick="toggleDropDown(''tm_menu'');'
                      'return false">'
                        txt_menu
                      '</a>'
                      '<br/>'
                      '<div class="topmenu_dropdown" id="tm_menu">'
                        '<table border="0" cellpadding="0"'
                        ' cellspacing="0"'
                        ' class="topmenu_dropdown_tab">'
                          '<tr>'
                            '<td class="topmenu_dropdown_td">'
                              '<a class="topmenu_dropdown_link"'
                              ' href="default.' gc_extension_htm '"'
                              ' onclick="'
                              'openDropDownLink(''menu_first_page'');'
                              'return false">'
                                txt_first_page
                              '</a>'
                            '</td>'
                          '</tr>'
                        '</table>'
                      '</div>'
                    '</td>'
*   System
                    '<td class="topmenu_td">'
                      '<a class="topmenu_link" href="#"'
                      ' onclick="toggleDropDown(''tm_system'');'
                      'return false">'
                        txt_system
                      '</a>'
                      '<br/>'
                      '<div class="topmenu_dropdown" id="tm_system">'
                        '<table border="0" cellpadding="0"'
                        ' cellspacing="0"'
                        ' class="topmenu_dropdown_tab">'
                          '<tr>'
                            '<td class="topmenu_dropdown_td">'
                              '<a class="topmenu_dropdown_link"'
                              ' href="MENU_SYSTEM/STATUS.'
                                gc_extension_htm '" onclick="'
                              'openDropDownLink(''system_status'');'
                              'return false">'
                                txt_status
                              '</a>'
                            '</td>'
                          '</tr>'
                          '<tr>'
                            '<td class="topmenu_dropdown_td">'
                              '<a class="topmenu_dropdown_link"'
                              ' href="MENU_SYSTEM/KERNEL.'
                                gc_extension_htm '" onclick="'
                              'openDropDownLink(''system_kernel'');'
                              'return false">'
                                txt_kernel_information___1
                              '</a>'
                            '</td>'
                          '</tr>'
                          '<tr>'
                            '<td class="topmenu_dropdown_td">'
                              '<a class="topmenu_dropdown_link"'
                              ' href="MENU_SYSTEM/COMPONENT.'
                                gc_extension_htm '" onclick="'
                              'openDropDownLink(''system_component'');'
                              'return false">'
                                txt_component_information
                              '</a>'
                            '</td>'
                          '</tr>'
                        '</table>'
                      '</div>'
                    '</td>'
*   Help
                    '<td class="topmenu_td">'
                      '<a class="topmenu_link" href="#"'
                      ' onclick="toggleDropDown(''tm_help'');'
                      'return false">'
                        txt_help
                      '</a>'
                      '<br/>'
                      '<div class="topmenu_dropdown" id="tm_help">'
                        '<table border="0" cellpadding="0"'
                        ' cellspacing="0"'
                        ' class="topmenu_dropdown_tab">'
                          '<tr>'
                            '<td class="topmenu_dropdown_td">'
                              '<a class="topmenu_dropdown_link"'
                              ' href="http://www.globalbit.org"'
                              ' onclick="'
                              'openDropDownLink(''newWindow'','
                              '''http://www.globalbit.org'');'
                              'return false">'
                                'globalBIT'
                              '</a>'
                            '</td>'
                          '</tr>'
                          '<tr>'
                            '<td class="topmenu_dropdown_td">'
                              '<a class="topmenu_dropdown_link"'
                              ' href="http://www.globalbit.org/'
                                'opensource/softcopy"'
                              ' onclick="'
                              'openDropDownLink(''popup'','
                              '''http://www.globalbit.org/sc/updates?'
                              'langu=' l_laiso '&#38;'
                              'scver=' gc_version ''','''
                              txt_updates ''');'
                              'return false">'
                                txt_updates
                              '</a>'
                            '</td>'
                          '</tr>'
                          '<tr>'
                            '<td class="topmenu_dropdown_td">'
                              '<a class="topmenu_dropdown_link"'
                              ' href="MENU_HELP/about.'
                                gc_extension_htm '"'
                              ' onclick="'
                              'openDropDownLink(''help_about'');'
                              'return false">'
                                txt_about
                              '</a>'
                            '</td>'
                          '</tr>'
                        '</table>'
                      '</div>'
                    '</td>'
                  '</tr>'
                '</table>'
              '</td>'
              '<td class="topmenu"'
              ' style="padding-right:5px;text-align:right">'
                'powered by globalBIT'
              '</td>'
            '</tr>'
* Title
            '<tr>'
              '<td class="toptitle" colspan="2" id="title">'
                '&#x53;&#x6f;&#x66;&#x74;&#x43;&#x6f;&#x70;&#x79;'
              '</td>'
            '</tr>'
          '</table>'

          '<table border="0" cellpadding="0" cellspacing="0" id="sc">'
            '<tr>'
              '<td class="links" id="links">'
    INTO ls_html.
  APPEND ls_html TO lt_html.
*Links
  PERFORM links
    CHANGING
      lt_html.
  CONCATENATE
              '</td>'
              '<td id="contentDiv" class="content"></td>'
            '</tr>'
          '</table>'
          '<div class="scResizer" id="scResizer"'
          ' onmousedown="preResizeSc(event); return false;"></div>'
    INTO ls_html.
  APPEND ls_html TO lt_html.
  PERFORM html_base_popup
    USING 'info' l_c_info_width l_c_info_height
    CHANGING lt_html.
  APPEND '<script type="text/javascript"><!--' TO lt_html.
  APPEND 'window.onresize = makeFrameSize;' TO lt_html.
  APPEND '//--></script>' TO lt_html.
  CONCATENATE
*          '<div id="plDiv"'
*          ' style="display:none;visibility:hidden">'
*            '<iframe id="pl"'
*            ' src="http://www.globalbit.org/sc/postload?'
*            l_uri_props
*            '"></iframe>'
*            '&#160;'
*          '</div>'
        '</body>'
      '</html>'
      INTO ls_html.
  APPEND ls_html TO lt_html.

  PERFORM download
    USING
      lt_html
      space
      space
      'index'
      gc_extension_htm
      abap_false.
ENDFORM.                    "html_base_index


*-----------------------------------------------------------------------
* html_base_popup
*-----------------------------------------------------------------------
FORM html_base_popup
  USING
    value(i_id) TYPE string
    value(i_width) TYPE i
    value(i_height) TYPE i
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_width TYPE string,
  l_height TYPE string,
  l_caption_width TYPE string,
  l_div_width TYPE string,
  l_div_height TYPE string,
  ls_html TYPE string.

  l_width = i_width.
  CONDENSE l_width.
  l_height = i_height.
  CONDENSE l_height.
  l_caption_width = i_width - 16.
  CONDENSE l_caption_width.
  l_div_width = i_width + 4.
  CONDENSE l_div_width.
  l_div_height = i_height + 20.
  CONDENSE l_div_height.

  CONCATENATE
    '<div class="popupDiv" id="popup' i_id '"'
    ' style="height:' l_div_height 'px;width:' l_div_width 'px">'
      '<table border="0" cellpadding="0" cellspacing="0"'
      ' class="popupTable" style="width:' l_width 'px">'
        '<tr>'
          '<td align="left" class="popupTitle"'
          ' id="popupCaption' i_id '"'
          ' nowrap="nowrap"'
          ' onmousedown="preMovePopupLayer(event,''' i_id
          '''); return false;"'
          ' style="width:' l_caption_width 'px"'
          ' width="90%">'
            'Filter'
          '</td>'
          '<td class="popupClose">'
            '<div class="popupCloseButton">'
              '<a class="popupCloseLink"'
              ' href="JavaScript:hidePopupLayer(''' i_id
              ''')">'
                '&#215;'
              '</a>'
            '</div>'
          '</td>'
        '</tr>'
        '<tr>'
          '<td align="center" class="popupContentArea" colspan="2">'
            '<table border="0" cellpadding="0" cellspacing="0"'
            ' class="popupContentTable">'
              '<tr>'
                '<td class="popupContent" id="popupContent' i_id '"'
                ' nowrap="nowrap"'
                ' style="height:' l_height 'px;width:' l_width 'px">'
                  '&#160;'
                '</td>'
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
      '</table>'
    '</div>'
    INTO ls_html.
  APPEND ls_html TO ct_html.
  APPEND '<script type="text/javascript"><!--' TO ct_html.
  CONCATENATE
      'popupValues[popupValues.length]'
      ' = new Array("' i_id '", ' l_width ', ' l_height ');'
    INTO ls_html.
  APPEND ls_html TO ct_html.
  APPEND '//--></script>' TO ct_html.

ENDFORM.                    "html_base_popup


*-----------------------------------------------------------------------
* html_base_popup_css
*-----------------------------------------------------------------------
FORM html_base_popup_css
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  CONCATENATE
    '.popupClose{'
      'background-color:#102873;'
      'border-bottom:1px solid #63828c;'
      'border-left-width:0px;'
      'border-right:1px solid #63828c;'
      'border-top:1px solid #adb6ce;'
      'border-spacing:0px;'
      'font-size:12px;'
      'padding-bottom:0px;'
      'padding-left:3px;'
      'padding-right:0px;'
      'padding-top:1px;'
      'text-align:right !important;'
      'vertical-align:top !important;'
      'width:20px;'
    '}'
    '.popupCloseButton{'
      'background-color:#102873;'
      'border:1px solid #5a69a5;'
      'color:#5a69a5;'
      'height:12px;'
      'overflow:hidden;'
      'text-align:center;'
      'vertical-align:top;'
      'width:12px;'
    '}'
    '.popupCloseLink{'
      'color:#5a69a5;'
      'font-size:13px;'
      'font-style:normal;'
      'font-weight:normal;'
      'line-height:13px;'
      'margin:0px;'
      'text-align:right !important;'
      'text-decoration:none;'
      'vertical-align:top;'
    '}'
    '.popupContent{'
      'background-color:#94b2c5;'
      'border-width:0px;'
      'border-spacing:0px;'
      'color:#000000;'
      'font-family:arial,helvetica,sans-serif;'
      'font-size:12px;'
      'font-style:normal;'
      'font-weight:normal;'
      'margin:0px 0px;'
      'padding:2px;'
      'text-align:left;'
    '}'
    '.popupContentArea{'
      'background-color:#94b2c5;'
      'border-bottom:1px solid #3a3d3a;'
      'border-left:1px solid #b5b6ad;'
      'border-right:1px solid #cecabd;'
      'border-top:1px solid #849ead;'
      'border-spacing:0px;'
      'color:#000000;'
      'font-family:arial,helvetica,sans-serif;'
      'font-size:12px;'
      'font-style:normal;'
      'font-weight:normal;'
      'margin:0px 0px;'
      'padding:0px;'
      'text-align:center;'
    '}'
    '.popupContentTable{'
      'background-color:#94b2c5;'
      'border-bottom:1px solid #63828c;'
      'border-left:1px solid #94b2c5;'
      'border-right:1px solid #63828c;'
      'border-top:1px solid #8caab5;'
      'border-spacing:0px;'
      'color:#000000;'
      'font-family:arial,helvetica,sans-serif;'
      'font-size:12px;'
      'font-style:normal;'
      'font-weight:normal;'
      'margin:0px 0px;'
      'padding:0px;'
      'text-align:center;'
    '}'
    '.popupDiv{'
      'background-color:#94b2c5;'
      'display:none;'
      'left:0px;'
      'position:absolute;'
      'top:0px;'
      'visibility:hidden;'
      'z-index:90;'
    '}'
    '.popupTable{'
      'background-color:#d6d2ce;'
      'border-width:0px;'
      'border-spacing:0px;'
      'padding:0px;'
    '}'
    '.popupTitle{'
      'background-color:#102873;'
      'border-bottom:1px solid #63828c;'
      'border-left:1px solid #adb6ce;'
      'border-right-width:0px;'
      'border-top:1px solid #adb6ce;'
      'border-spacing:0px;'
      'color:#9ca6c5;'
      'cursor:move;'
      'font-family:arial,helvetica,sans-serif;'
      'font-size:12px;'
      'font-style:normal;'
      'font-weight:normal;'
      'padding-bottom:1px;'
      'padding-left:3px;'
      'padding-right:3px;'
      'padding-top:1px;'
      'text-align:left;'
      'white-space:nowrap;'
    '}'
    INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "html_base_popup_css


*-----------------------------------------------------------------------
* html_base_popup_js
*-----------------------------------------------------------------------
FORM html_base_popup_js
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  CONCATENATE
    'var popupCallbacks=new Array();'
    'var popupClicked="";'
    'var popupMouseX=0;'
    'var popupMouseY=0;'
    'var popupValues=new Array();'
    INTO ls_html.
  APPEND ls_html TO ct_html.

*Sets new content and caption and displays a popup layer
  CONCATENATE
    'function displayPopupLayer(id,caption,content,callback){'
      'var width;'
      'var height;'
      'for(var i=0;i<popupValues.length;i++){'
        'if(popupValues[i][0] == id){'
          'width=popupValues[i][1]+4;'
          'height=popupValues[i][2]+20;'
        '}'
      '}'
      'for(var i=0; i<popupCallbacks.length; i++){'
        'if(popupCallbacks[i]!=null && popupCallbacks[i][0]==id){'
          'if(popupCallbacks[i][1]==callback)'
            'return;'
          'window.setTimeout(popupCallbacks[i][1],1);'
          'popupCallbacks[i]=null;'
        '}'
      '}'
      'if(content!=null)'
        'document.getElementById("popupContent"+id).innerHTML=content;'
      'if(caption!=null)'
        'document.getElementById("popupCaption"+id).innerHTML=caption;'

      'var userAgent=navigator.userAgent.toLowerCase();'
      'var msieVersion=0;'
      'if(userAgent.indexOf("msie")){'
        'var myArr=userAgent.split("(")[1].split(")")[0].split(";");'
        'for(var j=0;j<myArr.length;j++){'
          'if(myArr[j].indexOf("msie")>=0){'
            'msieVersion=((((myArr[j].replace(/^[^\S]+/,"")'
            '.replace(/[^\S]+$/,"")).split(" "))[1]).split("."))[0];'
          '}'
        '}'
      '}'

      'var filterDivObj=document.getElementById("popup"+id);'
      'var left = (document.body.clientWidth - width) / 2;'
      'var top = (document.body.clientHeight - height) / 2;'
      'left=((window.innerWidth/2)+window.pageXOffset)'
        '-((parseInt(filterDivObj.style.width))/2)+"px";'
      'top=((window.innerHeight/2)+window.pageYOffset)'
        '-((parseInt(filterDivObj.style.height))/2)+"px";'
      'filterDivObj.style.left=left;'
      'filterDivObj.style.top=top;'
      'filterDivObj.style.display="block";'
      'filterDivObj.style.visibility="visible";'
      'if(callback!=null && callback!="")'
        'popupCallbacks[popupCallbacks.length]=new Array(id,callback);'
    '}'
    INTO ls_html.
  APPEND ls_html TO ct_html.
* Hides a popup layer
  CONCATENATE
    'function hidePopupLayer(id){'
      'document.getElementById("popup"+id).style.display="none";'
      'for(var i=0;i<popupCallbacks.length;i++){'
        'if(popupCallbacks[i]!=null && popupCallbacks[i][0]==id){'
          'window.setTimeout(popupCallbacks[i][1],100);'
          'popupCallbacks[i]=null;'
        '}'
      '}'
    '}'
    INTO ls_html.
  APPEND ls_html TO ct_html.
* Moves a popup layer
  CONCATENATE
    'function movePopupLayer(event){'
      'var filterDivObj=document.getElementById("popup"+popupClicked);'
      'filterDivObj.style.left=event.pageX-popupMouseX+"px";'
      'filterDivObj.style.top=event.pageY-popupMouseY+"px";'
    '}'
    INTO ls_html.
  APPEND ls_html TO ct_html.
* Stops moving a popup layer
  CONCATENATE
    'function postMovePopupLayer(){'
      'popupClicked="";'
      'popupMouseX=0;'
      'popupMouseY=0;'
      'document.onmousemove=null;'
      'document.onmouseup=null;'
    '}'
    INTO ls_html.
  APPEND ls_html TO ct_html.
* Prepares for moving a popup layer.
  CONCATENATE
    'function preMovePopupLayer(event,id){'
      'popupClicked=id;'
      'if(event){'
        'popupMouseX=event.layerX;'
        'popupMouseY=event.layerY;'
      '}'
      'document.onmousemove=movePopupLayer;'
      'document.onmouseup=postMovePopupLayer;'
    '}'
    INTO ls_html.
  APPEND ls_html TO ct_html.
* Updated the popup caption
  CONCATENATE
    'function updatePopupCaption(id, caption){'
      'if(caption!=null)'
        'document.getElementById("popupCaption"+id).innerHTML=caption;'
    '}'
    INTO ls_html.
  APPEND ls_html TO ct_html.
ENDFORM.                    "html_base_popup_js
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_HTML_LINKS                             *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* html_links_leaf
*-----------------------------------------------------------------------
FORM html_links_leaf
  USING
    value(i_id)
    value(i_sub_id)
    value(i_name)
    value(i_descript)
  CHANGING
    ct_html TYPE it_string.

  PERFORM html_links_leaf_filename
    USING
      i_id
      i_sub_id
      i_name
      i_name
      i_descript
    CHANGING
      ct_html.
ENDFORM.                    "html_links_leaf


*-----------------------------------------------------------------------
* html_links_leaf_filename
*-----------------------------------------------------------------------
FORM html_links_leaf_filename
  USING
    value(i_id)
    value(i_sub_id)
    value(i_name)
    value(i_filename)
    value(i_descript)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_text TYPE string,
  l_title TYPE string,
  l_fname TYPE string.

  l_text = i_name.
  l_title = i_descript.
  PERFORM encode_html CHANGING l_text.
  PERFORM encode_html CHANGING l_title.

  l_fname = i_filename.
  SHIFT l_fname LEFT DELETING LEADING '/'.
  PERFORM replace_all
    USING '<' '-'
    CHANGING l_fname.
  PERFORM replace_all
    USING '>' '-'
    CHANGING l_fname.
  PERFORM encode_uri
    CHANGING l_fname.

  ADD 1 TO g_cnt_link_leaves.

  CONCATENATE
      '<li class="leaf">'
        '<a class="leafLink"'
        ' href="' i_id '/' l_fname '.' gc_extension_htm '"'
        ' id="' i_id '_' i_sub_id '_' g_cnt_link_leaves '"'
        ' onclick="showObject(''' i_id ''',''' l_fname ''');'
            'return false" title="' l_title '">'
          l_text
        '</a>'
      '</li>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
ENDFORM.                    "html_links_leaf_filename


*-----------------------------------------------------------------------
* html_links_leaf_mime
*-----------------------------------------------------------------------
FORM html_links_leaf_mime
  USING
    value(i_id)
    value(i_name)
    value(i_filename)
    value(i_descript)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_text TYPE string,
  l_title TYPE string,
  l_fname TYPE string.

  l_text = i_name.
  l_title = i_descript.
  PERFORM encode_html CHANGING l_text.
  PERFORM encode_html CHANGING l_title.

  l_fname = i_filename.
  SHIFT l_fname LEFT DELETING LEADING '/'.
  PERFORM replace_all
    USING '<' '-'
    CHANGING l_fname.
  PERFORM replace_all
    USING '>' '-'
    CHANGING l_fname.
  PERFORM encode_uri
    CHANGING l_fname.

  CONCATENATE
      '<li class="leaf">'
        '<a class="leafLink" href="' i_id '/' l_fname '"'
        ' onclick="window.open(''' i_id '/' l_fname ''');'
            'return false" title="' l_title '">'
          l_text
        '</a>'
      '</li>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
ENDFORM.                    "html_links_leaf_mime


*-----------------------------------------------------------------------
* html_links_leaf_popup
*-----------------------------------------------------------------------
FORM html_links_leaf_popup
  USING
    value(i_id)
    value(i_name)
    value(i_filename)
    value(i_descript)
    value(i_caption)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_text TYPE string,
  l_title TYPE string,
  l_fname TYPE string.

  l_text = i_name.
  l_title = i_descript.
  PERFORM encode_html CHANGING l_text.
  PERFORM encode_html CHANGING l_title.

  l_fname = i_filename.
  SHIFT l_fname LEFT DELETING LEADING '/'.
  PERFORM replace_all
    USING '<' '-'
    CHANGING l_fname.
  PERFORM replace_all
    USING '>' '-'
    CHANGING l_fname.
  PERFORM encode_uri
    CHANGING l_fname.

  CONCATENATE
      '<li class="leaf">'
        '<a class="leafLink" href="' i_id '/' l_fname '"'
        ' onclick="parent.parent.showObject(''' i_id '/' l_fname
            ''', ''' i_caption ''');'
            'return false" title="' l_title '">'
          l_text
        '</a>'
      '</li>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
ENDFORM.                    "html_links_leaf_popup


*-----------------------------------------------------------------------
* html_links_node_end
*-----------------------------------------------------------------------
FORM html_links_node_end
  CHANGING
    ct_html TYPE it_string.

  APPEND '</ul></li>' TO ct_html.
ENDFORM.                    "html_links_node_end


*-----------------------------------------------------------------------
* html_links_node_start
*-----------------------------------------------------------------------
FORM html_links_node_start
  USING
    value(i_id)
    value(i_text)
    value(i_filename)
    value(i_descript)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_dir TYPE string,
  l_suffix TYPE string,
  l_title TYPE string,
  l_fname TYPE string,
  l_dblclick TYPE string,
  l_info TYPE string.

  l_title = i_descript.
  PERFORM encode_html CHANGING l_title.

  SPLIT i_id AT '__' INTO l_dir l_suffix.

  IF NOT i_filename IS INITIAL.
    l_fname = i_filename.
    SHIFT l_fname LEFT DELETING LEADING '/'.
    PERFORM replace_all
      USING '<' '-'
      CHANGING l_fname.
    PERFORM replace_all
      USING '>' '-'
      CHANGING l_fname.
    PERFORM encode_uri
      CHANGING l_fname.

    CONCATENATE
        ' ondblclick="showObject(''' l_dir ''',''' l_fname ''','
        '''POPUP'',''' txt_info ''');return false"'
        INTO l_dblclick.
    CONCATENATE
        '&#160;<a class="info"'
        ' href="' l_dir '/' l_fname '.' gc_extension_htm '"'
        ' onclick="showObject(''' l_dir ''',''' l_fname ''','
        '''POPUP'',''' txt_info ''');return false">*</a>'
        INTO l_info.
  ENDIF.

  CONCATENATE
      '<li class="node">'
        '<a class="nodeLink" href="#"'
        ' onclick="toggleVisibility(''' i_id ''');return false"'
        l_dblclick
        ' title="' l_title '">'
          i_text
        '</a>'
        l_info
        '<ul id="' i_id '">'
      INTO ls_html.
  APPEND ls_html TO ct_html.
ENDFORM.                    "html_links_node_start
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_HTML_MAIN                              *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* form: html_main_header
*-----------------------------------------------------------------------
FORM html_main_header
  USING
    value(i_title)
    value(i_name_field)
    value(i_name_value)
    value(i_name_active)
    value(i_descr_field)
    value(i_descr_value)
    value(i_onresize)
    it_tabstrip TYPE it_tabstrip
    it_link TYPE it_link
  CHANGING
    ct_html TYPE it_string.

  DATA:
  lt_tabstrip TYPE it_tabstrip,
  ls_html TYPE string,
  l_class TYPE string,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt,
  l_title TYPE string.

  FIELD-SYMBOLS:
  <ls_link> TYPE st_link,
  <ls_tabstrip> TYPE st_tabstrip.

  l_title = i_title.
  PERFORM replace_single
      USING '#NAME_VALUE#' i_name_value
      CHANGING l_title.

  PERFORM get_spras
    USING
      sy-langu
      l_laiso
      l_sptxt.
  PERFORM get_tabstrip_defined
    USING it_tabstrip
    CHANGING lt_tabstrip.
***
  CONCATENATE
      '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
      ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  CONCATENATE
    '<html xmlns="http://www.w3.org/1999/xhtml"'
    ' xml:lang="' l_laiso '" lang="' l_laiso '">'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  CONCATENATE
      '<head>'
        '<title id="title">' l_title '</title>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  PERFORM html_add_meta CHANGING ct_html.
*javascript
  PERFORM html_main_js
    USING
      l_title
      i_onresize
      lt_tabstrip
    CHANGING
      ct_html.
*style
  PERFORM html_main_style
    CHANGING
      ct_html.
*
  CONCATENATE
      '</head>'
      '<body id="body" onload="myOnResize()">' INTO ls_html.
  APPEND ls_html TO ct_html.
*
  CONCATENATE
        '<script type="text/javascript">'
            '<!--'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  CONCATENATE
              'if(top==self){'
                'document.write("'
                  '<table>'
                    '<tr>'
                      '<td class=\"button\">'
                        '<a href=\"../index.htm\"'
                        ' onclick=\"addFrame();return false\">'
                          txt_frameset
                        '<\/a>'
                      '<\/td>'
                    '<\/tr>'
                  '<\/table>'
                '");'
              '}'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  APPEND '//-->' TO ct_html.
  APPEND '</script>' TO ct_html.
*
  CONCATENATE
        '<form action="../index.htm" id="addFrame"'
        ' method="get">'
          '<p style="display:none;visibility:hidden">'
            '<input id="addFrameA" name="pgmid" type="hidden"/>'
            '<input id="addFrameB" name="object" type="hidden"/>'
            '<input id="addFrameC" name="obj_name" type="hidden"/>'
          '</p>'
        '</form>'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*
  IF ( NOT i_name_field IS INITIAL AND NOT i_name_value IS INITIAL )
  OR ( NOT i_descr_field IS INITIAL AND NOT i_descr_value IS INITIAL ).
    APPEND   '<table class="titleTable">' TO ct_html.
    IF NOT i_name_field IS INITIAL AND NOT i_name_value IS INITIAL.
      CONCATENATE
          '<tr>'
            '<td class="titleTableText">' i_name_field '</td>'
            '<td class="titleTableDescr">' i_name_value '</td>'
            '<td>' i_name_active '</td>'
            '<td style="width:100px">'
              '&#160;&#160;&#160;&#160;&#160;'
            '</td>'
          INTO ls_html.
      LOOP AT it_link ASSIGNING <ls_link>.
        CONCATENATE
            ls_html
            '<td>&#160;</td>'
            '<td class="button">'
              '<a href="' <ls_link>-href '"'
              ' onclick="' <ls_link>-onclick ';return false"'
              ' title="' <ls_link>-title '">'
                <ls_link>-descript
              '</a>'
            '</td>'
            INTO ls_html.
      ENDLOOP.
      CONCATENATE ls_html '</tr>' INTO ls_html.
      APPEND ls_html TO ct_html.
    ENDIF.
    IF NOT i_descr_field IS INITIAL AND NOT i_descr_value IS INITIAL.
      CONCATENATE
          '<tr>'
            '<td class="titleTableText">' i_descr_field '</td>'
            '<td class="titleTableDescr" colspan="2">'
              i_descr_value
            '</td>'
            '<td>&#160;</td>'
          INTO ls_html.
      LOOP AT it_link ASSIGNING <ls_link>.
        CONCATENATE
            ls_html
            '<td colspan="2">&#160;</td>'
            INTO ls_html.
      ENDLOOP.
      CONCATENATE ls_html '</tr>' INTO ls_html.
      APPEND ls_html TO ct_html.
    ENDIF.
    APPEND   '</table><div>&#160;</div>' TO ct_html.
  ENDIF.
  CONCATENATE
      '<table border="0" cellpadding="0" cellspacing="0"'
      ' class="contentTable" width="100%">' INTO ls_html.
  APPEND  ls_html TO ct_html.
  IF NOT lt_tabstrip IS INITIAL.
    READ TABLE lt_tabstrip TRANSPORTING NO FIELDS
      WITH KEY firstrow = abap_true
               hidden = abap_false
               parent_id = space.
    IF sy-subrc = 0.
      CONCATENATE
          '<tr>'
            '<td class="contentTable">'
              '<table border="0" cellpadding="0" cellspacing="0"'
              ' class="contentTable">'
                '<tr>'
          INTO ls_html.
      APPEND ls_html TO ct_html.
      LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>
          WHERE hidden = abap_false
          AND firstrow = abap_true
          AND parent_id IS INITIAL.
        IF <ls_tabstrip>-disabled = abap_true.
          l_class = 'contentTabDisabled'.
        ELSEIF <ls_tabstrip>-active = abap_true.
          l_class = 'contentTabOn'.
        ELSE.
          l_class = 'contentTabOff'.
        ENDIF.
        IF <ls_tabstrip>-disabled = abap_false.
          CONCATENATE '<td class="' l_class '" id="' <ls_tabstrip>-id
            'tab"><a href="#" onclick="openTab('''
            <ls_tabstrip>-id ''')">'
            <ls_tabstrip>-text '</a></td>' INTO ls_html.
          APPEND ls_html TO ct_html.
        ELSE.
          CONCATENATE '<td class="' l_class '" id="' <ls_tabstrip>-id
            'tab"><a class="linkDisabled" href="#"'
            ' onclick="return false">'
            <ls_tabstrip>-text '</a></td>' INTO ls_html.
          APPEND ls_html TO ct_html.
        ENDIF.
      ENDLOOP.
      CONCATENATE
                '</tr>'
              '</table>'
            '</td>'
          '</tr>'
          INTO ls_html.
      APPEND ls_html TO ct_html.
    ENDIF.
    CONCATENATE
        '<tr>'
          '<td class="contentTable">'
            '<table border="0" cellpadding="0" cellspacing="0"'
            ' class="contentTable">'
              '<tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>
      WHERE hidden = abap_false
      AND firstrow = abap_false
      AND parent_id IS INITIAL.
      IF <ls_tabstrip>-disabled = abap_true.
        l_class = 'contentTabDisabled'.
      ELSEIF <ls_tabstrip>-active = abap_true.
        l_class = 'contentTabOn'.
      ELSE.
        l_class = 'contentTabOff'.
      ENDIF.
      IF <ls_tabstrip>-disabled = abap_false.
        CONCATENATE '<td class="' l_class '" id="' <ls_tabstrip>-id
          'tab"><a href="#" onclick="openTab('''
          <ls_tabstrip>-id ''')">'
          <ls_tabstrip>-text '</a></td>' INTO ls_html.
        APPEND ls_html TO ct_html.
      ELSE.
        CONCATENATE '<td class="' l_class '" id="' <ls_tabstrip>-id
          'tab"><a class="linkDisabled" href="#"'
          ' onclick="return false">'
          <ls_tabstrip>-text '</a></td>' INTO ls_html.
        APPEND ls_html TO ct_html.
      ENDIF.
    ENDLOOP.
    CONCATENATE
              '</tr>'
            '</table>'
          '</td>'
        '</tr>'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDIF.
  APPEND '<tr>' TO ct_html.
  APPEND '<td class="contentBox">' TO ct_html.

ENDFORM.                    "html_main_header


*-----------------------------------------------------------------------
* form: html_main_js
*-----------------------------------------------------------------------
FORM html_main_js
  USING
    value(i_title)
    value(i_onresize)
    it_tabstrip TYPE it_tabstrip
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  FIELD-SYMBOLS:
  <ls_tabstrip> TYPE st_tabstrip.

  CONCATENATE
    '<script type="text/javascript">'
      '<!--'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*addFrame
  CONCATENATE
        'function addFrame() {'
          'var parts;'
          'if(window.location.pathname.indexOf("\\") >= 0) {'
            'parts = window.location.pathname.split("\\");'
          '}'
          'else {'
            'parts = window.location.pathname.split("/");'
          '}'
          'var po = parts[parts.length-2].split("_");'
          'document.getElementById("addFrameA").value = po[0];'
          'document.getElementById("addFrameB").value = po[1];'
          'var objName = parts[parts.length-1];'
          'objName = objName.substring(0,objName.lastIndexOf("."));'
          'document.getElementById("addFrameC").value = objName;'
          'document.getElementById("addFrame").submit();'
        '}'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*loadIFrame
  CONCATENATE
        'function loadIFrame(id, url) {'
          'var iframeElem;'
          'var myHTML;'
          'myHTML="<iframe frameborder=\"0\"'
          ' height=\"400\"'
          ' id=\""+id+"scroll\"'
          ' scrolling=\"auto\"'
          ' src=\""+url+"\"'
          ' width=\"90%\">'
          '<\/iframe>";'
          'iframeElem=document.getElementById(id+"iframe");'
          'iframeElem.innerHTML=myHTML;'
        '}'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*makeDivSize
  CONCATENATE
        'function makeDivSize(divName) {'
          'var winHeight;'
          'var winWidth;'
          'var bodyHeight;'
          'var divPar;'
          'var divElem;'
          'var divHeight;'
          'var divHeightNew;'
          'var divWidthNew;'
          'divPar = document.getElementById(divName+"div");'
          'if(divPar == null'
          ' || divPar.style.visibility == "hidden") {'
            'return;'
          '}'
          'divElem = document.getElementById(divName+"scroll");'
          'if(divElem == null) {'
            'return;'
          '}'
          'divElem.style.overflowX = "auto";'
          'divElem.style.overflowY = "auto";'
          'winHeight = window.innerHeight;'
          'winWidth = window.innerWidth;'
          'bodyHeight = document.body.offsetHeight;'
          'divHeight = divElem.offsetHeight;'
          'divHeightNew = divHeight+winHeight-bodyHeight-20;'
          'divWidthNew = winWidth-40;'
          'divElem.style.height = divHeightNew + "px";'
          'divElem.style.width = divWidthNew + "px";'
        '}'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*myOnResize
  CONCATENATE
        'function myOnResize() {'
          i_onresize ';'
        '}'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*openChildTab
  CONCATENATE
        'function openChildTab(parentID, tabID) {'
          'var elem;'
          'switchChildContent(parentID, tabID);'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  LOOP AT it_tabstrip ASSIGNING <ls_tabstrip>
      WHERE disabled = abap_false
      AND NOT parent_id IS INITIAL.
    IF <ls_tabstrip>-hidden = abap_false.
      CONCATENATE
          'document.getElementById("' <ls_tabstrip>-id 'tab")'
          '.className="contentTabOff";'
          INTO ls_html.
      APPEND ls_html TO ct_html.
    ENDIF.
  ENDLOOP.
  LOOP AT it_tabstrip ASSIGNING <ls_tabstrip>
      WHERE disabled = abap_false
      AND NOT parent_id IS INITIAL
      and ACTIVE = abap_true.
    CONCATENATE
          'if(parentID!="' <ls_tabstrip>-parent_id '"){'
            'document.getElementById(tabID+"tab")'
            '.className="contentTabOn";'
          '}'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDLOOP.
  CONCATENATE
          'document.getElementById(tabID+"tab")'
          '.className="contentTabOn";'
        '}'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*openTab
  CONCATENATE
        'function openTab(tabID) {'
          'var elem;'
          'switchContent(tabID);'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  LOOP AT it_tabstrip ASSIGNING <ls_tabstrip>
      WHERE disabled = abap_false
      AND parent_id IS INITIAL.
    IF <ls_tabstrip>-hidden = abap_false.
      CONCATENATE
          'document.getElementById("' <ls_tabstrip>-id 'tab")'
          '.className="contentTabOff";'
          INTO ls_html.
      APPEND ls_html TO ct_html.
    ENDIF.
  ENDLOOP.
  CONCATENATE
          'document.getElementById(tabID+"tab")'
          '.className="contentTabOn";'
        '}'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*setTitle
  CONCATENATE
        'function setTitle() {'
          'try {'
            'if(top!=self) {'
              'parent.setTitle("' i_title '");'
            '}'
          '}'
          'catch(e) {'
          '}'
        '}'
        INTO ls_html.
  APPEND ls_html TO ct_html.
*switchChildContent
  CONCATENATE
        'function switchChildContent(parentID, tabID) {'
          'var elem;'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  LOOP AT it_tabstrip ASSIGNING <ls_tabstrip>
      WHERE disabled = abap_false
      AND NOT parent_id IS INITIAL.
    CONCATENATE
          'elem=document.getElementById("'
            <ls_tabstrip>-id 'div");'
          'elem.style.display="none";'
          'elem.style.visibility="hidden";'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDLOOP.
  LOOP AT it_tabstrip ASSIGNING <ls_tabstrip>
      WHERE disabled = abap_false
      AND NOT parent_id IS INITIAL
      and ACTIVE = abap_true.
    CONCATENATE
          'if(parentID!="' <ls_tabstrip>-parent_id '"){'
            'elem=document.getElementById(tabID+"div");'
            'elem.style.display="block";'
            'elem.style.visibility="visible";'
          '}'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDLOOP.
  CONCATENATE
          'elem=document.getElementById(tabID+"div");'
          'elem.style.display="block";'
          'elem.style.visibility="visible";'
          i_onresize ';'
        '}'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*switchContent
  CONCATENATE
        'function switchContent(tabID) {'
          'var elem;'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  LOOP AT it_tabstrip ASSIGNING <ls_tabstrip>
      WHERE disabled = abap_false
      AND parent_id IS INITIAL.
    CONCATENATE
          'elem=document.getElementById("'
            <ls_tabstrip>-id 'div");'
          'elem.style.display="none";'
          'elem.style.visibility="hidden";'
        INTO ls_html.
    APPEND ls_html TO ct_html.
  ENDLOOP.
  CONCATENATE
          'elem=document.getElementById(tabID+"div");'
          'elem.style.display="block";'
          'elem.style.visibility="visible";'
          i_onresize ';'
        '}'
      INTO ls_html.
  APPEND ls_html TO ct_html.
*
  APPEND '//--></script>' TO ct_html.

ENDFORM.                    "html_main_js


*-----------------------------------------------------------------------
* form: html_main_footer
*-----------------------------------------------------------------------
FORM html_main_footer
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  CONCATENATE
              '</td>'
            '</tr>'
          '</table>'
          '<script type="text/javascript">'
            '<!--'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  APPEND 'window.setTimeout("setTitle()",50);' TO ct_html.
  APPEND 'window.onresize = myOnResize;' TO ct_html.
  APPEND '//-->' TO ct_html.
  APPEND '</script>' TO ct_html.
  CONCATENATE
        '</body>'
      '</html>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "mainAddHTMLFooter


*-----------------------------------------------------------------------
* form: html_main_iFrameHeader
*-----------------------------------------------------------------------
FORM html_main_iframeheader
  USING
    value(i_title)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt.

  FIELD-SYMBOLS:
  <ls_tabstrip> TYPE st_tabstrip.

  PERFORM get_spras
    USING
      sy-langu
      l_laiso
      l_sptxt.

  CONCATENATE
      '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
      ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  CONCATENATE
      '<html xmlns="http://www.w3.org/1999/xhtml"'
      ' xml:lang="' l_laiso '" lang="' l_laiso '">'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  CONCATENATE
        '<head>'
          '<title id="title">' i_title '</title>'
          INTO ls_html.
  APPEND ls_html TO ct_html.
  PERFORM html_add_meta CHANGING ct_html.
  PERFORM html_main_style
    CHANGING
      ct_html.
  CONCATENATE
        '</head>'
        '<body class="iframebody" id="body">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "html_main_iFrameHeader


*-----------------------------------------------------------------------
* form: html_main_iFrameFooter
*-----------------------------------------------------------------------
FORM html_main_iframefooter
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  CONCATENATE
        '</body>'
      '</html>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "html_main_iFrameFooter


*-----------------------------------------------------------------------
* form: html_main_popupHeader
*-----------------------------------------------------------------------
FORM html_main_popupheader
  USING
    value(i_title)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt.

  FIELD-SYMBOLS:
  <ls_tabstrip> TYPE st_tabstrip.

  PERFORM get_spras
    USING
      sy-langu
      l_laiso
      l_sptxt.

  CONCATENATE
      '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"'
      ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  CONCATENATE
      '<html xmlns="http://www.w3.org/1999/xhtml"'
      ' xml:lang="' l_laiso '" lang="' l_laiso '">'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  CONCATENATE
        '<head>'
          '<title id="title">' i_title '</title>'
          INTO ls_html.
  APPEND ls_html TO ct_html.
  PERFORM html_add_meta CHANGING ct_html.
  PERFORM html_main_style
    CHANGING
      ct_html.
  CONCATENATE
        '</head>'
        '<body class="popupbody" id="body">'
      INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "html_main_popupHeader


*-----------------------------------------------------------------------
* form: html_main_popupFooter
*-----------------------------------------------------------------------
FORM html_main_popupfooter
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  CONCATENATE
        '</body>'
      '</html>'
      INTO ls_html.
  APPEND ls_html TO ct_html.

ENDFORM.                    "html_main_popupFooter


*-----------------------------------------------------------------------
* form: html_main_style
*-----------------------------------------------------------------------
FORM html_main_style
  CHANGING
    ct_html TYPE it_string.

  DATA:
  ls_html TYPE string.

  APPEND '<style type="text/css">' TO ct_html.
  CONCATENATE
      'a {'
        'color:black;'
        'font-family:arial;'
        'font-size:10px;'
        'font-style:normal;'
        'font-weight:normal;'
        'text-decoration:none;'
      '}'
      'a:active {'
        'color:darkred;'
      '}'
      'a:focus {'
        'color:darkred;'
      '}'
      'a:hover {'
        'color:red;'
      '}'
      'a:link {'
        'color:black;'
      '}'
      'a:visited {'
        'color:#000000;'
      '}'
      'body {'
        'background-color:#94b6c6;'
        'margin:10px;'
      '}'
      'pre {'
        'font-size:11px;'
        'margin:0px;'
        'padding:0px;'
      '}'
      'span {'
        'color:#000000;'
        'font-family:arial;'
        'font-size:10px;'
        'font-style:normal;'
        'font-weight:normal;'
        'text-decoration:none;'
        'white-space:nowrap;'
      '}'
      'td {'
        'color:black;'
        'empty-cells:show;'
        'font-family:arial;'
        'font-size:10px;'
        'font-style:normal;'
        'font-weight:normal;'
        'text-align:left;'
        'text-decoration:none;'
        'white-space:nowrap;'
      '}'
      'th {'
        'color:black;'
        'empty-cells:show;'
        'font-family:arial;'
        'font-size:10px;'
        'font-style:normal;'
        'font-weight:normal;'
        'text-align:center;'
        'text-decoration:none;'
        'white-space:nowrap;'
      '}'
      '.box {'
        'border:1px solid #73716b;'
        'border-spacing:0px !important;'
        'padding:0px !important;'
        'margin:0px !important;'
      '}'
      '.boxContent {'
        'background-color:#ded7c5;'
        'border-spacing:0px !important;'
        'padding:0px !important;'
        'margin:0px !important;'
      '}'
      '.boxName {'
        'background-color:#cecabd;'
        'border-bottom:1px solid #73716b;'
        'border-left-width:0px;'
        'border-right:1px solid #73716b;'
        'border-top-width:0px;'
        'border-spacing:0px !important;'
        'margin:0px 3px 2px 0px !important;'
        'padding:1px 2px 1px 2px;'
      '}'
      '.boxContainerTd {'
        'border-spacing:0px !important;'
        'padding:0px !important;'
        'margin:0px !important;'
        'vertical-align:top;'
      '}'
      '.button {'
        'background-color:#efefde;'
        'border:1px solid #73716b;'
        'color:#000000;'
        'font-weight:bolder;'
        'font-size:8px;'
        'padding:1px 3px 1px 3px;'
        'text-align:center;'
        'vertical-align:middle;'
      '}'
      '.container {'
        'border-spacing:0px !important;'
      '}'
      '.containerContent {'
        'border:1px solid #73716b;'
        'border-spacing:0px !important;'
        'padding:2px;'
        'margin:0px !important;'
      '}'
      '.containerTitle {'
        'background-color:#cecabd;'
        'border-color:#73716b;'
        'border-spacing:0px !important;'
        'border-style:solid;'
        'border-width:1px 1px 0px 1px;'
        'margin:0px !important;'
        'padding:1px 2px 1px 2px;'
      '}'
      '.contentBox {'
        'background-color:#ded7c5;'
        'border-color:#ffffff #000000 #000000 #ffffff;'
        'border-style:solid;'
        'border-width:1px;'
        'padding:20px 5px 20px 5px;'
      '}'
      '.contentDiv {'
        'background-color:#ded7c5;'
        'height:100%;'
        'width:100%;'
      '}'
      '.contentTable {'
        'padding:0px;'
        'border-spacing:0px;'
      '}'
      '.contentTabDisabled {'
        'background-color:#c5c6b5;'
        'border-color:#ffffff #000000 #000000 #ffffff;'
        'border-style:solid;'
        'border-width:1px;'
        'color:#999999;'
        'padding:1px 10px 1px 10px;'
      '}'
      '.contentTabOff {'
        'background-color:#c5c6b5;'
        'border-color:#ffffff #000000 #000000 #ffffff;'
        'border-style:solid;'
        'border-width:1px;'
        'padding:1px 10px 1px 10px;'
      '}'
      '.contentTabOn {'
        'background-color:#ded7c5;'
        'border-color:#ffffff #000000 #000000 #ffffff;'
        'border-style:solid;'
        'border-width:1px 1px 0px 1px;'
        'padding:1px 10px 1px 10px;'
      '}'
      '.iframebody {'
        'background-color:#ded7c5;'
        'margin:0px;'
      '}'
      '.info {'
        'color:#0000ff'
      '}'
      '.innerTable {'
        'border-color:#73716b;'
        'border-style:solid;'
        'border-width:0px 0px 1px 1px;'
      '}'
      '.innerTableButton {'
        'background-color:#efefde;'
        'border:1px solid #73716b;'
        'color:#000000;'
        'font-weight:bolder;'
        'font-size:8px;'
        'padding:1px 3px 1px 3px;'
        'text-align:center;'
        'vertical-align:middle;'
        'width:20px;'
      '}'
      '.innerTableFlag {'
        'background-color:#cecebd;'
        'border:1px solid #ffffff;'
        'border-spacing:0px;'
        'color:#73716b;'
        'height:12px !important;'
        'margin:0px;'
        'padding:0px;'
        'width:12px !important;'
      '}'
      '.innerTableTD {'
        'background-color:#cecebd;'
        'border-color:#73716b;'
        'border-style:solid;'
        'border-width:1px 1px 0px 0px;'
        'empty-cells:show;'
        'padding:1px 3px 1px 3px;'
      '}'
      '.innerTableTDColored {'
        'background-color:#cecebd;'
        'border-color:#73716b;'
        'border-style:solid;'
        'border-width:1px 1px 0px 0px;'
        'color:#0000ff !important;'
        'empty-cells:show;'
        'padding:1px 3px 1px 3px;'
      '}'
      '.innerTableTH {'
        'background-color:#efefde;'
        'border-color:#73716b;'
        'border-style:solid;'
        'border-width:1px 1px 0px 0px;'
        'padding:1px 3px 1px 3px;'
      '}'
      '.innerTableTHtop {'
        'background-color:#cecabd;'
        'border-color:#73716b;'
        'border-style:solid;'
        'border-width:1px 1px 0px 0px;'
        'padding:1px 3px 1px 3px;'
      '}'
      '.linkDisabled {'
        'color:#888888 !important;'
      '}'
      '.popupbody {'
        'background-color:#94b2c5;'
        'margin:0px;'
      '}'
      '.radio {'
        'margin:0px'
      '}'
      '.scrollDiv {'
        'background-color:#ded7c5;'
      '}'
      '.scrollTable {'
        'border-spacing:0px;'
        'padding:0px;'
      '}'
      '.src {'
        'background-color:#cdcbbd;'
        'border-color:#ffffff #8c8e8c #8c8e8c #ffffff;'
        'border-style:solid;'
        'border-width:1px;'
        'overflow:auto;'
      '}'
      '.srcLine {'
        'color:#000000;'
        'empty-cells:show;'
      '}'
      '.srcLineComment {'
        'color:#0000ff;'
        'empty-cells:show;'
      '}'
      '.srcLineNumber {'
        'padding-right:5px;'
        'text-align:right;'
      '}'
      '.tableLink {'
        'color:#000000 !important;'
      '}'
      '.tableLinkColored {'
        'color:#0000ff !important;'
      '}'
      '.titleTable {'
        'border-spacing:2px;'
      '}'
      '.titleTableDescr {'
        'background-color:#cecebd;'
        'border:1px solid #ffffff;'
        'padding:1px 5px 1px 5px;'
      '}'
      '.titleTableText {'
        'border-bottom:1px solid #ffffff;'
        'padding-right:20px;'
      '}'
      INTO ls_html.
  APPEND ls_html TO ct_html.
  APPEND '</style>' TO ct_html.

ENDFORM.                    "addHTMLStyle
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_LINKS                                  *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* links
*-----------------------------------------------------------------------
FORM links
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_descript TYPE as4text.

  clear g_cnt_link_leaves.

  PERFORM get_devclass
    USING
      gs_tdevc-devclass
    CHANGING
      l_descript.

  APPEND '<ul>' TO ct_html.
  PERFORM html_links_node_start
    USING
      'R3TR_DEVC'
      gs_tdevc-devclass
      gs_tdevc-devclass
      l_descript
    CHANGING
      ct_html.

  SORT gt_ztadir BY
      pgmid
      object
      obj_name
      funcname
      subc
      dynpronr
      o2pagekey.


  PERFORM links_ddic CHANGING ct_html.
  PERFORM links_seo  CHANGING ct_html.
  PERFORM links_prog CHANGING ct_html.
  PERFORM links_fugr CHANGING ct_html.
  PERFORM links_incl CHANGING ct_html.
  PERFORM links_tran CHANGING ct_html.
  PERFORM links_para CHANGING ct_html.
  PERFORM links_msag CHANGING ct_html.
  PERFORM links_tobj CHANGING ct_html.
  PERFORM links_xslt CHANGING ct_html.
  PERFORM links_bsp  CHANGING ct_html.


  PERFORM html_links_node_end CHANGING ct_html.
  APPEND '</ul>' TO ct_html.

ENDFORM.                    "links


*-----------------------------------------------------------------------
* links - BSP
*-----------------------------------------------------------------------
FORM links_bsp
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_step_a TYPE flag.

  PERFORM links_bsp_apps  CHANGING ct_html l_step_a.
  PERFORM links_bsp_tags  CHANGING ct_html l_step_a.

  IF l_step_a = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_a = abap_false.
  ENDIF.

ENDFORM.                    "links_bsp


*-----------------------------------------------------------------------
* links - BSP - APPS
*-----------------------------------------------------------------------
FORM links_bsp_apps
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag,
  ls_ztadir TYPE st_ztadir,
  l_id TYPE string.

  LOOP AT gt_ztadir INTO ls_ztadir
      WHERE pgmid = 'R3TR'
      AND object = 'WAPA'
      AND o2pagekey = space.
    IF l_step_b IS INITIAL.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'bsplib'
            txt_bsp_library
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_WAPA'
          txt_bsp_applications
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM get_id
      USING 'R3TR_WAPA__' ls_ztadir-obj_name
      CHANGING l_id.
    PERFORM html_links_node_start
      USING
        l_id
        ls_ztadir-o2name
        ls_ztadir-obj_name
        ls_ztadir-descript
      CHANGING
        ct_html.
    PERFORM links_bsp_appl
      USING
        ls_ztadir-obj_name
        gc_o2type_ctrl
      CHANGING
        ct_html.
    PERFORM links_bsp_appl
      USING
        ls_ztadir-obj_name
        gc_o2type_view
      CHANGING
        ct_html.
    PERFORM links_bsp_appl
      USING
        ls_ztadir-obj_name
        gc_o2type_bsp
      CHANGING
        ct_html.
    PERFORM links_bsp_appl
      USING
        ls_ztadir-obj_name
        gc_o2type_incl
      CHANGING
        ct_html.
    PERFORM links_bsp_appl
      USING
        ls_ztadir-obj_name
        gc_o2type_mime
      CHANGING
        ct_html.
    PERFORM html_links_node_end
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    CLEAR l_step_b.
    PERFORM html_links_node_end
      CHANGING
        ct_html.
  ENDIF.
ENDFORM.                    "links_bsp_apps


*-----------------------------------------------------------------------
* links - BSP - APPL
*-----------------------------------------------------------------------
FORM links_bsp_appl
  USING
    value(i_obj_name)
    value(i_o2type)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_filename TYPE string,
  l_id TYPE string,
  l_type TYPE string,
  l_step_c TYPE flag,
  l_text TYPE string,
  lt_node_new TYPE it_string,
  lt_node_old TYPE it_string,
  l_subdir_cnt TYPE i,
  l_node_id TYPE string,
  l_node_id_cnt(3) TYPE n.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_node_new> TYPE string,
  <ls_node_old> TYPE string.

  CASE i_o2type.
    WHEN gc_o2type_ctrl.
      l_type = 'ctrl'.
      l_text = txt_controller.
    WHEN gc_o2type_view.
      l_type = 'view'.
      l_text = txt_views.
    WHEN gc_o2type_bsp.
      l_type = 'bsp'.
      l_text = txt_pages_with_flow_logic.
    WHEN gc_o2type_incl.
      l_type = 'incl'.
      l_text = txt_page_fragments.
    WHEN gc_o2type_mime.
      l_type = 'mime'.
      l_text = txt_mimes.
  ENDCASE.
  PERFORM get_id
    USING l_type i_obj_name
    CHANGING l_id.
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'WAPA'
      AND obj_name = i_obj_name
      AND o2type = i_o2type
      AND o2pagekey <> space.
    IF l_step_c = abap_false.
      l_step_c = abap_true.
      PERFORM html_links_node_start
        USING
          l_id
          l_text
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    SPLIT <ls_ztadir>-o2pagename AT '/' INTO TABLE lt_node_new.
*   close all subdirectories, that are not needed any more
    LOOP AT lt_node_old ASSIGNING <ls_node_old>.
      AT LAST.
        EXIT.
      ENDAT.
      READ TABLE lt_node_new ASSIGNING <ls_node_new>
          INDEX sy-tabix.
      IF sy-subrc <> 0 OR <ls_node_old> <> <ls_node_new>.
        PERFORM html_links_node_end CHANGING ct_html.
        l_subdir_cnt = l_subdir_cnt - 1.
      ENDIF.
    ENDLOOP.
*   create required subdirectories
    LOOP AT lt_node_new ASSIGNING <ls_node_new>.
      AT LAST.
        EXIT.
      ENDAT.
      READ TABLE lt_node_old ASSIGNING <ls_node_old>
          INDEX sy-tabix.
      IF sy-subrc <> 0 OR <ls_node_new> <> <ls_node_old>.
        ADD 1 TO l_node_id_cnt.
        CONCATENATE 'R3TR_WAPA_' l_node_id_cnt INTO l_node_id.
        PERFORM html_links_node_start
          USING
            l_node_id
            <ls_node_new>
            space
            space
          CHANGING
            ct_html.
        l_subdir_cnt = l_subdir_cnt + 1.
      ENDIF.
    ENDLOOP.
*   add leaf for mime
    CONCATENATE <ls_ztadir>-obj_name '-' l_type '/'
        <ls_ztadir>-o2pagename
        INTO l_filename.
    IF l_type = 'mime'.
      PERFORM html_links_leaf_mime
        USING
          'R3TR_WAPA'
          <ls_node_new>
          l_filename
          <ls_ztadir>-descript
        CHANGING
          ct_html.
    ELSE.
      PERFORM html_links_leaf_filename
        USING
          'R3TR_WAPA'
          l_type
          <ls_node_new>
          l_filename
          <ls_ztadir>-descript
        CHANGING
          ct_html.
    ENDIF.
    REFRESH lt_node_old.
    lt_node_old[] = lt_node_new[].
    REFRESH lt_node_new.
  ENDLOOP.
  DO l_subdir_cnt TIMES.
    PERFORM html_links_node_end CHANGING ct_html.
  ENDDO.
  IF l_step_c = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_c = abap_false.
  ENDIF.
ENDFORM.                    "links_bsp_appl


*-----------------------------------------------------------------------
* links - BSP - TAGS
*-----------------------------------------------------------------------
FORM links_bsp_tags
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag,
  l_id TYPE string,
  ls_ztadir TYPE st_ztadir.

  LOOP AT gt_ztadir INTO ls_ztadir
      WHERE pgmid = 'R3TR'
      AND object = 'WTAG'
      AND o2type = space.
    IF l_step_b IS INITIAL.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'bsplib'
            txt_bsp_library
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_WTAG'
          txt_bsp_extensions
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM get_id
      USING 'R3TR_WTAG__' ls_ztadir-obj_name
      CHANGING l_id.
    PERFORM html_links_node_start
      USING
        l_id
        ls_ztadir-obj_name
        ls_ztadir-obj_name
        ls_ztadir-descript
      CHANGING
        ct_html.
    PERFORM links_bsp_tag
      USING
        ls_ztadir-obj_name
      CHANGING
        ct_html.
    PERFORM html_links_node_end
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    CLEAR l_step_b.
    PERFORM html_links_node_end
      CHANGING
        ct_html.
  ENDIF.
ENDFORM.                    "links_bsp_tags


*-----------------------------------------------------------------------
* links - BSP - TAG
*-----------------------------------------------------------------------
FORM links_bsp_tag
  USING
    value(i_obj_name)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_filename TYPE string,
  l_id TYPE string.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  PERFORM get_id
    USING 'tag_' i_obj_name
    CHANGING l_id.
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'WTAG'
      AND obj_name = i_obj_name
      AND o2type = gc_o2type_tag.
    CONCATENATE <ls_ztadir>-obj_name '-'
        <ls_ztadir>-o2name
        INTO l_filename.
    PERFORM html_links_leaf_filename
      USING
        'R3TR_WTAG'
        ''
        <ls_ztadir>-o2name
        l_filename
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
ENDFORM.                    "links_bsp_tag


*-----------------------------------------------------------------------
* links - DDIC
*-----------------------------------------------------------------------
FORM links_ddic
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_step_a TYPE flag.

  PERFORM links_ddic_db    CHANGING ct_html l_step_a.
  PERFORM links_ddic_view  CHANGING ct_html l_step_a.
  PERFORM links_ddic_ttyp  CHANGING ct_html l_step_a.
  PERFORM links_ddic_struc CHANGING ct_html l_step_a.
  PERFORM links_ddic_dtel  CHANGING ct_html l_step_a.
  PERFORM links_ddic_doma  CHANGING ct_html l_step_a.
  PERFORM links_ddic_shlp  CHANGING ct_html l_step_a.
  PERFORM links_ddic_enqu  CHANGING ct_html l_step_a.
  PERFORM links_ddic_type  CHANGING ct_html l_step_a.

  IF l_step_a = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_a = abap_false.
  ENDIF.

ENDFORM.                    "links_ddic


*-----------------------------------------------------------------------
* links - DDIC - DB
*-----------------------------------------------------------------------
FORM links_ddic_db
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'TABL'
      AND ( tabclass = 'CLUSTER'
        OR tabclass = 'POOL'
        OR tabclass = 'TRANSP' ).
    IF l_step_b IS INITIAL.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'tabllib'
            txt_dict_objs
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_TABL_2'
          txt_database_tables
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_TABL'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    CLEAR l_step_b.
    PERFORM html_links_node_end
      CHANGING
        ct_html.
  ENDIF.
ENDFORM.                    "links_ddic_db


*-----------------------------------------------------------------------
* links - DDIC - DOMA
*-----------------------------------------------------------------------
FORM links_ddic_doma
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'DOMA'.
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'tabllib'
            txt_dict_objs
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_DOMA'
          txt_domains
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_DOMA'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    l_step_b = abap_false.
    PERFORM html_links_node_end CHANGING ct_html.
  ENDIF.
ENDFORM.                    "links_ddic_doma


*-----------------------------------------------------------------------
* links - DDIC - DTEL
*-----------------------------------------------------------------------
FORM links_ddic_dtel
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'DTEL'.
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'tabllib'
            txt_dict_objs
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_DTEL'
          txt_data_elements
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_DTEL'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    l_step_b = abap_false.
    PERFORM html_links_node_end CHANGING ct_html.
  ENDIF.
ENDFORM.                    "links_ddic_dtel


*-----------------------------------------------------------------------
* links - DDIC - ENQU
*-----------------------------------------------------------------------
FORM links_ddic_enqu
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'ENQU'.
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'tabllib'
            txt_dict_objs
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_ENQU'
          txt_lock_objects
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_ENQU'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    l_step_b = abap_false.
    PERFORM html_links_node_end CHANGING ct_html.
  ENDIF.
ENDFORM.                    "links_ddic_enqu


*-----------------------------------------------------------------------
* links - DDIC - SHLP
*-----------------------------------------------------------------------
FORM links_ddic_shlp
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'SHLP'.
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'tabllib'
            txt_dict_objs
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_SHLP'
          txt_srch_helps
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_SHLP'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    l_step_b = abap_false.
    PERFORM html_links_node_end CHANGING ct_html.
  ENDIF.
ENDFORM.                    "links_ddic_shlp


*-----------------------------------------------------------------------
* links - DDIC - STRUC
*-----------------------------------------------------------------------
FORM links_ddic_struc
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'TABL'
      AND ( tabclass = 'INTTAB'
        OR tabclass = 'VIEW'
        OR tabclass = 'APPEND' ).
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'tabllib'
            txt_dict_objs
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_TABL_VIEWAPPEND'
          txt_structures
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_TABL'
        'VIEWAPPEND'
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    l_step_b = abap_false.
    PERFORM html_links_node_end CHANGING ct_html.
  ENDIF.
ENDFORM.                    "links_ddic_struc


*-----------------------------------------------------------------------
* links - DDIC - TTYP
*-----------------------------------------------------------------------
FORM links_ddic_ttyp
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'TTYP'.
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'tabllib'
            txt_dict_objs
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_TTYP'
          txt_table_types
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_TTYP'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    l_step_b = abap_false.
    PERFORM html_links_node_end CHANGING ct_html.
  ENDIF.
ENDFORM.                    "links_ddic_ttyp


*-----------------------------------------------------------------------
* links - DDIC - TYPE
*-----------------------------------------------------------------------
FORM links_ddic_type
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'TYPE'.
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'tabllib'
            txt_dict_objs
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_TYPE'
          txt_type_grps
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_TYPE'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    l_step_b = abap_false.
    PERFORM html_links_node_end CHANGING ct_html.
  ENDIF.
ENDFORM.                    "links_ddic_type


*-----------------------------------------------------------------------
* links - DDIC - View
*-----------------------------------------------------------------------
FORM links_ddic_view
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'VIEW'.
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'tabllib'
            txt_dict_objs
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_VIEW_VIEW'
          txt_views
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_VIEW'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    l_step_b = abap_false.
    PERFORM html_links_node_end CHANGING ct_html.
  ENDIF.
ENDFORM.                    "links_ddic_view


*-----------------------------------------------------------------------
* links - FUGR
*-----------------------------------------------------------------------
FORM links_fugr
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_step_a TYPE flag,
  l_step_b TYPE flag,
  ls_ztadir TYPE st_ztadir,
  l_id TYPE string,
  l_progname TYPE progname.

  LOOP AT gt_ztadir INTO ls_ztadir
      WHERE pgmid = 'R3TR'
      AND object = 'FUGR'
      AND futype = gc_futype_group.
    IF l_step_a = abap_false.
      l_step_a = abap_true.
      PERFORM html_links_node_start
        USING
          'R3TR_FUGR'
          txt_function_groups
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM get_id
      USING 'R3TR_FUGR__' ls_ztadir-obj_name
      CHANGING l_id.
    CALL FUNCTION 'RS_TADIR_TO_PROGNAME'
      EXPORTING
        object   = ls_ztadir-object
        obj_name = ls_ztadir-obj_name
      IMPORTING
        progname = l_progname.
    PERFORM html_links_node_start
      USING
        l_id
        ls_ztadir-obj_name
        l_progname
        ls_ztadir-descript
      CHANGING
        ct_html.
***
    PERFORM links_fugr_modules
      USING ls_ztadir-obj_name
      CHANGING ct_html.
    PERFORM links_fugr_screens
      USING ls_ztadir-obj_name
      CHANGING ct_html.
    PERFORM links_fugr_includes
      USING ls_ztadir-obj_name
      CHANGING ct_html.
***
    PERFORM html_links_node_end CHANGING ct_html.
  ENDLOOP.

  IF l_step_a = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_a = abap_false.
  ENDIF.
ENDFORM.                    "links_fugr


*-----------------------------------------------------------------------
* links - FUGR - Includes
*-----------------------------------------------------------------------
FORM links_fugr_includes
  USING
    value(i_obj_name)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_id TYPE string,
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  PERFORM get_id
    USING 'fugr_incl_' i_obj_name
    CHANGING l_id.
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'FUGR'
      AND obj_name = i_obj_name
      AND futype = gc_futype_include.
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      PERFORM html_links_node_start
        USING
          l_id
          txt_includes
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_FUGR'
        'INCL'
        <ls_ztadir>-progname
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_b = abap_false.
  ENDIF.
ENDFORM.                    "links_fugr_includes


*-----------------------------------------------------------------------
* links - FUGR - Modules
*-----------------------------------------------------------------------
FORM links_fugr_modules
  USING
    value(i_obj_name)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_id TYPE string,
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  PERFORM get_id
    USING 'fugr_fuba_' i_obj_name
    CHANGING l_id.
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'FUGR'
      AND obj_name = i_obj_name
      AND futype = gc_futype_module.
    IF l_step_b = abap_false.
      l_step_b = abap_true.

      PERFORM html_links_node_start
        USING
          l_id
          txt_function_modules
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf_filename
      USING
        'R3TR_FUGR'
        'FUBA'
        <ls_ztadir>-funcname
        <ls_ztadir>-progname
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_b = abap_false.
  ENDIF.
ENDFORM.                    "links_fugr_modules


*-----------------------------------------------------------------------
* links - FUGR - Screens
*-----------------------------------------------------------------------
FORM links_fugr_screens
  USING
    value(i_obj_name)
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_filename TYPE string,
  l_id TYPE string,
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  PERFORM get_id
    USING 'fugr_scr_' i_obj_name
    CHANGING l_id.
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'FUGR'
      AND obj_name = i_obj_name
      AND futype = gc_futype_screen.
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      PERFORM html_links_node_start
        USING
          l_id
          txt_screens
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    CONCATENATE <ls_ztadir>-progname '-' <ls_ztadir>-dynpronr
        INTO l_filename.
    PERFORM html_links_leaf_filename
      USING
        'R3TR_FUGR'
        'SCR'
        <ls_ztadir>-dynpronr
        l_filename
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_b = abap_false.
  ENDIF.
ENDFORM.                    "links_fugr_screens


*-----------------------------------------------------------------------
* links - INCL
*-----------------------------------------------------------------------
FORM links_incl
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_step_a TYPE flag,
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

******includes
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'PROG'
      AND subc = 'I'.
    IF l_step_a = abap_false.
      l_step_a = abap_true.
      PERFORM html_links_node_start
        USING
          'prog_I'
          txt_includes
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_PROG'
        'INCL'
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
******
  IF l_step_a = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_a = abap_false.
  ENDIF.
ENDFORM.                    "links_incl


*-----------------------------------------------------------------------
* links - MSAG
*-----------------------------------------------------------------------
FORM links_msag
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_step_a TYPE flag,
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

******message classes
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'MSAG'.
    IF l_step_a = abap_false.
      l_step_a = abap_true.
      PERFORM html_links_node_start
        USING
          'msag'
          txt_message_classes
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_MSAG'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
******
  IF l_step_a = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_a = abap_false.
  ENDIF.
ENDFORM.                    "links_msag


*-----------------------------------------------------------------------
* links - PARA
*-----------------------------------------------------------------------
FORM links_para
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_step_a TYPE flag,
  l_step_b TYPE flag,
  l_filename TYPE string.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

******set/get parameters
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'PARA'.
    IF l_step_a = abap_false.
      l_step_a = abap_true.
      PERFORM html_links_node_start
        USING
          'para'
          txt_set_get_parameters
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    CONCATENATE <ls_ztadir>-obj_name '.' gc_extension_htm
      INTO l_filename.
    PERFORM encode_uri_link CHANGING l_filename.
    PERFORM replace_all
      USING '%' 'x'
      CHANGING l_filename.
    PERFORM html_links_leaf_popup
      USING
        'R3TR_PARA'
        <ls_ztadir>-obj_name
        l_filename
        <ls_ztadir>-descript
        tpt_para
      CHANGING
        ct_html.
  ENDLOOP.
******
  IF l_step_a = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_a = abap_false.
  ENDIF.
ENDFORM.                    "links_para


*-----------------------------------------------------------------------
* links - PROG
*-----------------------------------------------------------------------
FORM links_prog
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_step_a TYPE flag,
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

******programs
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'PROG'
      AND subc = '1'.
    IF l_step_a = abap_false.
      l_step_a = abap_true.
      PERFORM html_links_node_start
        USING
          'prog_1'
          txt_programs
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_PROG'
        'REPO'
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
******
  IF l_step_a = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_a = abap_false.
  ENDIF.
ENDFORM.                    "links_prog


*-----------------------------------------------------------------------
* links - SEO
*-----------------------------------------------------------------------
FORM links_seo
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_step_a TYPE flag.

  PERFORM links_seo_clas  CHANGING ct_html l_step_a.
  PERFORM links_seo_intf  CHANGING ct_html l_step_a.

  IF l_step_a = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_a = abap_false.
  ENDIF.

ENDFORM.                    "links_seo


*-----------------------------------------------------------------------
* links - SEO - CLAS
*-----------------------------------------------------------------------
FORM links_seo_clas
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

******classes
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'CLAS'.
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'claslib'
            txt_class_library
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_CLAS'
          txt_classes
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_CLAS'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    l_step_b = abap_false.
    PERFORM html_links_node_end
      CHANGING
        ct_html.
  ENDIF.
ENDFORM.                    "links_seo_clas


*-----------------------------------------------------------------------
* links - SEO - INTF
*-----------------------------------------------------------------------
FORM links_seo_intf
  CHANGING
    ct_html TYPE it_string
    c_step_a TYPE flag.

  DATA:
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'INTF'.
    IF l_step_b = abap_false.
      l_step_b = abap_true.
      IF c_step_a = abap_false.
        c_step_a = abap_true.
        PERFORM html_links_node_start
          USING
            'claslib'
            txt_class_library
            space
            space
          CHANGING
            ct_html.
      ENDIF.
      PERFORM html_links_node_start
        USING
          'R3TR_INTF'
          txt_interfaces
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_INTF'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
  IF l_step_b = abap_true.
    l_step_b = abap_false.
    PERFORM html_links_node_end CHANGING ct_html.
  ENDIF.
ENDFORM.                    "links_seo


*-----------------------------------------------------------------------
* links - TOBJ
*-----------------------------------------------------------------------
FORM links_tobj
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_step_a TYPE flag,
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

******authorization objects
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'SUSO'.
    IF l_step_a = abap_false.
      l_step_a = abap_true.
      PERFORM html_links_node_start
        USING
          'suso'
          txt_authorization_object___2
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_SUSO'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
******
  IF l_step_a = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_a = abap_false.
  ENDIF.
ENDFORM.                    "links_tobj


*-----------------------------------------------------------------------
* links - TRAN
*-----------------------------------------------------------------------
FORM links_tran
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_cinfo TYPE syhex01,
  l_def_call_tcode TYPE tcode,
  l_length TYPE i,
  l_off TYPE i,
  l_param TYPE tcdparam,
  l_step_a TYPE flag,
  l_step_b TYPE flag,
  l_tcode TYPE tcode,
  l_ttype TYPE c.

  CONSTANTS:
  lc_hex_tra TYPE x VALUE '00',               " Transaktion         T
  lc_hex_men TYPE x VALUE '01',               " Bereichsmenue       M
  lc_hex_par TYPE x VALUE '02',               " Parametertrans.     P
  lc_hex_rep TYPE x VALUE '80',               " Report              R
  lc_hex_rpv TYPE x VALUE '10',               " Report  mit Variante
  lc_hex_obj TYPE x VALUE '08',               " Objekttransaktionen
  lc_hex_chk TYPE x VALUE '04',               " mit Pruefobjekt
  lc_oo_tcode LIKE tstc-tcode VALUE 'OS_APPLICATION'.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

******transactions
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'TRAN'.

    l_tcode = <ls_ztadir>-obj_name.
    SELECT SINGLE cinfo FROM tstc INTO l_cinfo
        WHERE tcode = l_tcode.
    SELECT SINGLE param FROM tstcp INTO l_param
        WHERE tcode = l_tcode.

    CASE l_param(1).
      WHEN '@'.
        l_off = 1.
        IF l_param(2) = '@@'.
          l_off = 2.
        ENDIF.
        IF l_param CA space. ENDIF.
        l_length = sy-fdpos - l_off.
        l_def_call_tcode = l_param+l_off(l_length).
      WHEN '/'.
        IF l_param CA space. ENDIF.
        l_length = sy-fdpos.
        IF l_length > 2.
          SUBTRACT 2 FROM l_length.
          l_def_call_tcode = l_param+2(l_length).
        ENDIF.
    ENDCASE.

    IF l_cinfo O lc_hex_rep.                 "report transaction
      l_ttype = gc_tcode_report.
    ELSEIF l_cinfo O lc_hex_obj.             "object transaction
      l_ttype = gc_tcode_object.
    ELSEIF l_cinfo O lc_hex_par.             "parameter transaction
      l_ttype = gc_tcode_parameter.
      IF NOT l_param IS INITIAL
      AND l_param(1) = '@'.                  "variant transaction
        l_ttype = gc_tcode_variant.
      ELSEIF l_def_call_tcode = lc_oo_tcode. "object transaction
        l_ttype = gc_tcode_object.
      ENDIF.
    ELSEIF l_cinfo O lc_hex_men.             "menue
    ELSE.                                    "dialog transaction
      l_ttype = gc_tcode_dialog.
    ENDIF.

    IF l_step_a = abap_false.
      l_step_a = abap_true.
      PERFORM html_links_node_start
        USING
          'tran'
          txt_transactions
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_TRAN'
        l_ttype
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
******
  IF l_step_a = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_a = abap_false.
  ENDIF.
ENDFORM.                    "links_tran


*-----------------------------------------------------------------------
* links - XSLT
*-----------------------------------------------------------------------
FORM links_xslt
  CHANGING
    ct_html TYPE it_string.

  DATA:
  l_step_a TYPE flag,
  l_step_b TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.
******transformations
  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'XSLT'.
    IF l_step_a = abap_false.
      l_step_a = abap_true.
      PERFORM html_links_node_start
        USING
          'xslt'
          txt_transformations
          space
          space
        CHANGING
          ct_html.
    ENDIF.
    PERFORM html_links_leaf
      USING
        'R3TR_XSLT'
        ''
        <ls_ztadir>-obj_name
        <ls_ztadir>-descript
      CHANGING
        ct_html.
  ENDLOOP.
******
  IF l_step_a = abap_true.
    PERFORM html_links_node_end CHANGING ct_html.
    l_step_a = abap_false.
  ENDIF.
ENDFORM.                    "links_xslt
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_SELECT                                 *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* select
*-----------------------------------------------------------------------
FORM select.

  DATA:
  lt_tadir TYPE STANDARD TABLE OF tadir.

  SELECT * FROM tadir INTO TABLE lt_tadir
      WHERE devclass = g_pack.

  PERFORM select_obj TABLES lt_tadir.

  DESCRIBE TABLE gt_ztadir LINES g_cnt_elems.

ENDFORM.                    "select


*-----------------------------------------------------------------------
* select_obj
*-----------------------------------------------------------------------
FORM select_obj
  TABLES
    tt_tadir STRUCTURE tadir.

  DATA:
  l_where TYPE string,
  ls_ztadir TYPE st_ztadir,
  l_last_pgmid TYPE pgmid,
  l_last_object TYPE trobjtype.

  FIELD-SYMBOLS:
  <ls_tadir> TYPE tadir.


  SORT tt_tadir BY pgmid object.

  LOOP AT tt_tadir ASSIGNING <ls_tadir>.
    CLEAR ls_ztadir.
    MOVE-CORRESPONDING <ls_tadir> TO ls_ztadir.

    CASE <ls_tadir>-pgmid.
      WHEN 'R3TR'.
        CASE <ls_tadir>-object.
          WHEN 'CLAS'.  PERFORM select_seoclass   CHANGING ls_ztadir.
          WHEN 'DOMA'.  PERFORM select_dd01       CHANGING ls_ztadir.
          WHEN 'DTEL'.  PERFORM select_dd04       CHANGING ls_ztadir.
          WHEN 'ENQU'.  PERFORM select_dd25       CHANGING ls_ztadir.
          WHEN 'FUGR'.  PERFORM select_fdir       CHANGING ls_ztadir.
          WHEN 'INTF'.  PERFORM select_seoclass   CHANGING ls_ztadir.
          WHEN 'MSAG'.  PERFORM select_t100       CHANGING ls_ztadir.
          WHEN 'PARA'.  PERFORM select_tpara      CHANGING ls_ztadir.
          WHEN 'PROG'.  PERFORM select_trdir      CHANGING ls_ztadir.
          WHEN 'SHLP'.  PERFORM select_dd30       CHANGING ls_ztadir.
          WHEN 'SUSO'.  PERFORM select_tobj       CHANGING ls_ztadir.
          WHEN 'TABL'.  PERFORM select_dd02       CHANGING ls_ztadir.
          WHEN 'TRAN'.  PERFORM select_tstc       CHANGING ls_ztadir.
          WHEN 'TTYP'.  PERFORM select_dd40       CHANGING ls_ztadir.
          WHEN 'TYPE'.  PERFORM select_ddtypet    CHANGING ls_ztadir.
          WHEN 'VIEW'.  PERFORM select_dd25       CHANGING ls_ztadir.
          WHEN 'WAPA'.  PERFORM select_o2_appl    CHANGING ls_ztadir.
          WHEN 'WTAG'.  PERFORM select_o2_taglib  CHANGING ls_ztadir.
          WHEN 'XSLT'.  PERFORM select_o2_xslt    CHANGING ls_ztadir.
          WHEN OTHERS.  ls_ztadir-subrc = gc_subrc_not_found.
        ENDCASE.
      WHEN OTHERS.
        ls_ztadir-subrc = gc_subrc_not_found.
    ENDCASE.

    IF ls_ztadir-subrc = 0.
      APPEND ls_ztadir TO gt_ztadir.
    ENDIF.
  ENDLOOP.

  SORT gt_ztadir BY obj_name.

ENDFORM.                    "selectObj


*-----------------------------------------------------------------------
* select_dd01                                    Domaenen
*-----------------------------------------------------------------------
FORM select_dd01
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_ddtext TYPE as4text,
  l_domname TYPE domname.

  IF g_add_elem_doma = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    SELECT SINGLE ddtext FROM dd01t INTO l_ddtext
        WHERE domname = cs_ztadir-obj_name
        AND ddlanguage = sy-langu
        AND as4local = 'A'.
    IF sy-subrc = 0.
      cs_ztadir-descript = l_ddtext.
    ELSE.
      SELECT SINGLE domname FROM dd01l INTO l_domname
          WHERE domname = cs_ztadir-obj_name
          AND as4local = 'A'.
      IF sy-subrc = 0.
        cs_ztadir-obj_name = l_domname.
      ELSE.
        cs_ztadir-subrc = gc_subrc_not_found.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_dd01


*-----------------------------------------------------------------------
* select_dd02                                    SAP-Tabellen
*-----------------------------------------------------------------------
FORM select_dd02
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_ddtext TYPE as4text,
  l_tabname TYPE tabname.


  l_tabname = cs_ztadir-obj_name.
  SELECT SINGLE tabclass FROM dd02l INTO cs_ztadir-tabclass
      WHERE tabname = l_tabname
      AND as4local = 'A'.
  IF sy-subrc = 0.
    IF ( cs_ztadir-tabclass = 'INTTAB'
      OR cs_ztadir-tabclass = 'VIEW'
      OR cs_ztadir-tabclass = 'APPEND' )
    AND g_add_elem_struc = abap_false.
      cs_ztadir-subrc = gc_subrc_deselected.
    ELSEIF ( cs_ztadir-tabclass = 'CLUSTER'
      OR cs_ztadir-tabclass = 'POOL'
      OR cs_ztadir-tabclass = 'TRANSP' )
    AND g_add_elem_tabl = abap_false.
      cs_ztadir-subrc = gc_subrc_deselected.
    ELSE.
      SELECT SINGLE ddtext FROM dd02t INTO l_ddtext
          WHERE tabname = l_tabname
          AND ddlanguage = sy-langu
          AND as4local = 'A'.
      IF sy-subrc = 0.
        cs_ztadir-descript = l_ddtext.
      ENDIF.
    ENDIF.
  ELSE.
    cs_ztadir-subrc = gc_subrc_not_found.
  ENDIF.
ENDFORM.                    "select_dd02


*-----------------------------------------------------------------------
* select_dd04                                    Datenelemente
*-----------------------------------------------------------------------
FORM select_dd04
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_ddtext TYPE as4text,
  l_rollname TYPE rollname.

  IF g_add_elem_dtel = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    l_rollname = cs_ztadir-obj_name.
    SELECT SINGLE ddtext FROM dd04t INTO l_ddtext
        WHERE rollname = l_rollname
        AND ddlanguage = sy-langu
        AND as4local = 'A'.
    IF sy-subrc = 0.
      cs_ztadir-descript = l_ddtext.
    ELSE.
      SELECT SINGLE rollname FROM dd04l INTO l_rollname
          WHERE rollname = l_rollname
          AND as4local = 'A'.
      IF sy-subrc <> 0.
        cs_ztadir-subrc = gc_subrc_not_found.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_dd04


*-----------------------------------------------------------------------
* links_dd25                                     Aggregat-Header
*                               (Views, Matchcode-Objekte, Sperrobjekte)
*-----------------------------------------------------------------------
FORM select_dd25
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_ddtext TYPE ddtext,
  l_viewname TYPE viewname.

  IF ( cs_ztadir-object = 'ENQU' AND g_add_elem_enqu = abap_false )
  OR ( cs_ztadir-object = 'VIEW' AND g_add_elem_view = abap_false ).
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    l_viewname = cs_ztadir-obj_name.
    SELECT SINGLE aggtype FROM dd25l INTO cs_ztadir-aggtype
        WHERE viewname = l_viewname
        AND as4local = 'A'.
    IF sy-subrc = 0.
      SELECT SINGLE ddtext FROM dd25t INTO l_ddtext
          WHERE viewname = l_viewname
          AND ddlanguage = sy-langu
          AND as4local = 'A'.
      IF sy-subrc = 0.
        cs_ztadir-descript = l_ddtext.
      ENDIF.
    ELSE.
      cs_ztadir-subrc = gc_subrc_not_found.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_dd25


*-----------------------------------------------------------------------
* select_dd30                                    Suchhilfen
*-----------------------------------------------------------------------
FORM select_dd30
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_ddtext TYPE ddtext,
  l_shlpname TYPE shlpname.

  IF g_add_elem_shlp = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    l_shlpname = cs_ztadir-obj_name.
    SELECT SINGLE ddtext FROM dd30t INTO l_ddtext
        WHERE shlpname = l_shlpname
        AND ddlanguage = sy-langu
        AND as4local = 'A'.
    IF sy-subrc = 0.
      cs_ztadir-descript = l_ddtext.
    ELSE.
      SELECT SINGLE shlpname FROM dd30l INTO l_shlpname
          WHERE shlpname = l_shlpname
          AND as4local = 'A'.
      IF sy-subrc <> 0.
        cs_ztadir-subrc = gc_subrc_not_found.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_dd30


*-----------------------------------------------------------------------
* links_dd40                                     Tabellentypen
*                                    (im DD definierte interne Tabellen)
*-----------------------------------------------------------------------
FORM select_dd40
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_ddtext TYPE ddtext,
  l_typename TYPE typename.

  IF g_add_elem_ttyp = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    l_typename = cs_ztadir-obj_name.
    SELECT SINGLE ddtext FROM dd40t INTO l_ddtext
        WHERE typename = l_typename
        AND ddlanguage = sy-langu
        AND as4local = 'A'.
    IF sy-subrc = 0.
      cs_ztadir-descript = l_ddtext.
    ELSE.
      SELECT SINGLE typename FROM dd40l INTO l_typename
          WHERE typename = l_typename
          AND as4local = 'A'.
      IF sy-subrc <> 0.
        cs_ztadir-subrc = gc_subrc_not_found.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_dd40


*-----------------------------------------------------------------------
* select_ddtypet                                 Texte zu Typgruppen
*-----------------------------------------------------------------------
FORM select_ddtypet
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_ddtext TYPE ddtext,
  l_typegroup TYPE typegroup.

  IF g_add_elem_type = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    l_typegroup = cs_ztadir-obj_name.
    SELECT SINGLE ddtext FROM ddtypet INTO l_ddtext
        WHERE typegroup = l_typegroup
        AND ddlanguage = sy-langu.
    IF sy-subrc = 0.
      cs_ztadir-descript = l_ddtext.
    ELSE.
      cs_ztadir-subrc = gc_subrc_not_found.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_ddtypet


*-----------------------------------------------------------------------
* select_fdir                                    Funktionsgruppen
*-----------------------------------------------------------------------
FORM select_fdir
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  ls_ztadir TYPE st_ztadir,
  lt_ztadir TYPE it_ztadir,
  lt_fdir TYPE STANDARD TABLE OF v_fdir,
  l_progname TYPE progname,
  lt_incl TYPE STANDARD TABLE OF progname,
  l_incl TYPE progname,
  l_group TYPE area,
  l_include_number TYPE includenr,
  lt_d020s TYPE STANDARD TABLE OF d020s,
  l_area TYPE rs38l_area,
  l_areat TYPE areat,
  l_stext TYPE rs38l_ftxt,
  l_dtxt TYPE as4text,
  l_text TYPE repti.

  FIELD-SYMBOLS:
  <ls_fdir> TYPE v_fdir,
  <ls_d020s> TYPE d020s.

  l_area = cs_ztadir-obj_name.

* Function Group
  IF g_add_elem_fugr = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    cs_ztadir-futype = gc_futype_group.
    SELECT SINGLE areat FROM tlibt INTO l_areat
      WHERE area = l_area
      AND spras = sy-langu.
    IF sy-subrc = 0.
      cs_ztadir-descript = l_areat.
    ELSE.
      SELECT SINGLE area FROM tlibg INTO l_area
        WHERE area = l_area.
      IF sy-subrc <> 0.
        cs_ztadir-subrc = gc_subrc_not_found.
        CHECK sy-subrc = 0.
      ENDIF.
    ENDIF.
    CALL FUNCTION 'RS_TADIR_TO_PROGNAME'
      EXPORTING
        object   = cs_ztadir-object
        obj_name = cs_ztadir-obj_name
      IMPORTING
        progname = l_progname.
  ENDIF.

* Function Modules
  IF g_add_elem_fuba = abap_true
  OR g_add_elem_fuincl = abap_true.
    SELECT * FROM v_fdir INTO TABLE lt_fdir
        WHERE area = l_area
        AND active = abap_true.
    LOOP AT lt_fdir ASSIGNING <ls_fdir>.
      CLEAR ls_ztadir.
      MOVE-CORRESPONDING cs_ztadir TO ls_ztadir.
      CLEAR ls_ztadir-descript.
      ls_ztadir-futype = gc_futype_module.
      ls_ztadir-funcname = <ls_fdir>-funcname.
      IF NOT <ls_fdir>-masterlang IS INITIAL.
        ls_ztadir-masterlang = <ls_fdir>-masterlang.
      ENDIF.
      SELECT SINGLE stext FROM tftit INTO l_stext
        WHERE funcname = <ls_fdir>-funcname
        AND spras = sy-langu.
      IF sy-subrc = 0.
        ls_ztadir-descript = l_stext.
      ENDIF.
      CALL FUNCTION 'FUNCTION_INCLUDE_CONCATENATE'
        EXPORTING
          include_number = <ls_fdir>-include
        IMPORTING
          include        = ls_ztadir-progname
        CHANGING
          group          = <ls_fdir>-area.
      APPEND ls_ztadir TO lt_ztadir.
      IF g_add_elem_fuba = abap_true.
        APPEND ls_ztadir TO gt_ztadir.
      ENDIF.
    ENDLOOP.
  ENDIF.

* Screens
  IF g_add_elem_scr = abap_true.
    SELECT * FROM d020s INTO TABLE lt_d020s
      WHERE prog = l_progname.
    LOOP AT lt_d020s ASSIGNING <ls_d020s>.
      CLEAR ls_ztadir.
      MOVE-CORRESPONDING cs_ztadir TO ls_ztadir.
      CLEAR ls_ztadir-descript.
      SELECT SINGLE dtxt FROM d020t INTO l_dtxt
        WHERE prog = l_progname
        AND dynr = <ls_d020s>-dnum
        AND lang = sy-langu.
      IF sy-subrc = 0.
        ls_ztadir-descript = l_dtxt.
      ENDIF.
      ls_ztadir-futype = gc_futype_screen.
      ls_ztadir-progname = l_progname.
      ls_ztadir-dynpronr = <ls_d020s>-dnum.
      ls_ztadir-masterlang = <ls_d020s>-spra.
      APPEND ls_ztadir TO gt_ztadir.
    ENDLOOP.
  ENDIF.

* Includes
  IF g_add_elem_fuincl = abap_true.
    CALL FUNCTION 'GET_INCLUDETAB'
      EXPORTING
        progname = l_progname
      TABLES
        incltab  = lt_incl.
    SORT lt_incl.
    LOOP AT lt_incl INTO l_incl.
      l_progname = l_incl.
      CALL FUNCTION 'FUNCTION_INCLUDE_SPLIT'
        IMPORTING
          group          = l_group
          include_number = l_include_number
        CHANGING
          include        = l_progname.
*     check if include is a function module
      READ TABLE lt_ztadir TRANSPORTING NO FIELDS
        WITH KEY progname = l_progname.
      IF sy-subrc = 0.
        CONTINUE.      "include is a function module
      ENDIF.
      IF l_group = cs_ztadir-obj_name
      AND NOT l_include_number IS INITIAL.
        CONTINUE.
      ENDIF.
      CLEAR ls_ztadir.
      MOVE-CORRESPONDING cs_ztadir TO ls_ztadir.
      CLEAR ls_ztadir-descript.
      SELECT SINGLE text FROM trdirt INTO l_text
          WHERE name = l_incl
          AND sprsl = sy-langu.
      IF sy-subrc = 0.
        ls_ztadir-descript = l_text.
      ENDIF.
      ls_ztadir-futype = gc_futype_include.
      ls_ztadir-funcname = l_incl.
      ls_ztadir-progname = l_incl.
      CALL FUNCTION 'RS_PROGRAM_GET_DEVCLASS'
        EXPORTING
          progname = ls_ztadir-progname
        IMPORTING
          devclass = ls_ztadir-devclass.
      APPEND ls_ztadir TO gt_ztadir.
    ENDLOOP.
  ENDIF.
ENDFORM.                    "select_fdir


*-----------------------------------------------------------------------
* select_O2_appl                                 BSP Applications
*-----------------------------------------------------------------------
FORM select_o2_appl
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_text TYPE as4text,
  l_applname(30) TYPE c,
  l_applext(30) TYPE c,
  l_descript(60) TYPE c,
  ls_ztadir TYPE st_ztadir,
  l_pagekey(70) TYPE c,
  l_pagename(70) TYPE c,
  l_pagetype TYPE c,
  lt_mime TYPE it_mime.

  FIELD-SYMBOLS:
  <ls_mime> TYPE st_mime.

  IF g_add_elem_o2appl = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    l_applname = cs_ztadir-obj_name.
    SELECT SINGLE applname applext FROM ('O2APPL')
        INTO (l_applname, l_applext)
        WHERE applname = l_applname
        AND version = 'A'.
    IF sy-subrc = 0.
      cs_ztadir-o2name = l_applext.
      SELECT SINGLE text FROM ('O2APPLT') INTO l_text
          WHERE applname = l_applname
          AND langu = sy-langu.
      IF sy-subrc = 0.
        cs_ztadir-descript = l_text.
      ENDIF.
* Controller, Views, Pages with Flow Logik, Page Fragments
      SELECT pagekey pagename pagetype FROM ('O2PAGDIR')
          INTO (l_pagekey, l_pagename, l_pagetype)
          WHERE applname = l_applname
          ORDER BY pagekey.
        IF ( l_pagetype = gc_o2type_bsp
             AND g_add_elem_o2applbsp  = abap_true )
        OR ( l_pagetype = gc_o2type_ctrl
             AND g_add_elem_o2applctrl = abap_true )
        OR ( l_pagetype = gc_o2type_incl
             AND g_add_elem_o2applincl = abap_true )
        OR ( l_pagetype = gc_o2type_view
             AND g_add_elem_o2applview = abap_true ).
          CLEAR: ls_ztadir.
          MOVE-CORRESPONDING cs_ztadir TO ls_ztadir.
          CLEAR l_descript.
          SELECT SINGLE descript FROM ('O2PAGDIRT')
              INTO l_descript
              WHERE applname = l_applname
              AND pagekey = l_pagekey
              AND langu = sy-langu.
          ls_ztadir-descript = l_descript.
          ls_ztadir-o2pagekey = l_pagekey.
          ls_ztadir-o2pagename = l_pagename.
          ls_ztadir-o2type = l_pagetype.
          APPEND ls_ztadir TO gt_ztadir.
        ENDIF.
      ENDSELECT.
*MIMEs
      IF g_add_elem_o2applmime  = abap_true.
        PERFORM o2_get_mimes
          USING l_applname
          CHANGING lt_mime.
        LOOP AT lt_mime ASSIGNING <ls_mime>.
          CLEAR: ls_ztadir.
          MOVE-CORRESPONDING cs_ztadir TO ls_ztadir.
          CLEAR ls_ztadir-descript.
          ls_ztadir-o2pagekey = <ls_mime>-key.
          ls_ztadir-o2pagename = <ls_mime>-name.
          ls_ztadir-o2type = gc_o2type_mime.
          ls_ztadir-mime_objtype = <ls_mime>-objtype.
          ls_ztadir-mime_class = <ls_mime>-class.
          ls_ztadir-mime_objid = <ls_mime>-objid.
          ls_ztadir-descript = <ls_mime>-mimetype_descript.
          APPEND ls_ztadir TO gt_ztadir.
        ENDLOOP.
      ENDIF.
***
    ELSE.
      cs_ztadir-subrc = gc_subrc_not_found.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_O2_appl


*-----------------------------------------------------------------------
* select_O2_taglib                               BSP Extensions
*-----------------------------------------------------------------------
FORM select_o2_taglib
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_descript TYPE as4text,
  l_tlibid(30) TYPE c,
  l_tagid(30) TYPE c,
  ls_ztadir TYPE st_ztadir.

  IF g_add_elem_o2taglib = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    l_tlibid = cs_ztadir-obj_name.
    SELECT SINGLE tlibid FROM ('O2TAGLIB') INTO l_tlibid
        WHERE tlibid = l_tlibid
        AND state = 'A'.
    IF sy-subrc = 0.
      SELECT SINGLE descript FROM ('TAGLIBT') INTO l_descript
          WHERE tlibid = l_tlibid
          AND state = 'A'
          AND langu = sy-langu.
      IF sy-subrc = 0.
        cs_ztadir-descript = l_descript.
      ENDIF.
* TAGs
      SELECT tagid FROM ('O2TAG') INTO l_tagid
          WHERE tlibid = l_tlibid
          AND state = 'A'.
        CLEAR: ls_ztadir.
        MOVE-CORRESPONDING cs_ztadir TO ls_ztadir.
        CLEAR ls_ztadir-descript.
        SELECT SINGLE descript FROM ('TAGT') INTO l_descript
            WHERE tlibid = l_tlibid
            AND state = 'A'
            AND langu = sy-langu
            AND tagid = l_tagid.
        IF sy-subrc = 0.
          ls_ztadir-descript = l_descript.
        ENDIF.
        ls_ztadir-o2type = gc_o2type_tag.
        ls_ztadir-o2name = l_tagid.
        ls_ztadir-o2pagekey = l_tagid.
        TRANSLATE ls_ztadir-o2pagekey TO UPPER CASE.
        APPEND ls_ztadir TO gt_ztadir.
      ENDSELECT.
***
    ELSE.
      cs_ztadir-subrc = gc_subrc_not_found.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_O2_taglib


*-----------------------------------------------------------------------
* select_O2_xslt                                 Transformation
*-----------------------------------------------------------------------
FORM select_o2_xslt
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_descript TYPE as4text,
  l_xsltdesc(40) TYPE c.

  IF g_add_elem_xslt = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    l_xsltdesc = cs_ztadir-obj_name.
    SELECT SINGLE descript FROM ('O2XSLTTEXT') INTO l_descript
        WHERE xsltdesc = l_xsltdesc
        AND langu = sy-langu
        AND state = 'A'.
    IF sy-subrc = 0.
      cs_ztadir-descript = l_descript.
    ELSE.
      cs_ztadir-subrc = gc_subrc_not_found.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_O2_xslt


*-----------------------------------------------------------------------
* select_seoclass                                Klasse/Interface
*-----------------------------------------------------------------------
FORM select_seoclass
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_descript TYPE seodescr,
  l_clsname TYPE seoclsname,
  l_type TYPE seoclstype.

  l_clsname = cs_ztadir-obj_name.
  CASE cs_ztadir-object.
    WHEN 'CLAS'.
      l_type = 0.
      IF g_add_elem_clas = abap_false.
        cs_ztadir-subrc = gc_subrc_deselected.
      ENDIF.
    WHEN 'INTF'.
      l_type = 1.
      IF g_add_elem_intf = abap_false.
        cs_ztadir-subrc = gc_subrc_deselected.
      ENDIF.
    WHEN OTHERS.
      l_type = 2.
  ENDCASE.
  IF cs_ztadir-subrc = 0.
    SELECT SINGLE clsname FROM seoclass INTO l_clsname
        WHERE clsname = l_clsname
        AND clstype = l_type.
    IF sy-subrc <> 0.
      cs_ztadir-subrc = gc_subrc_not_found.
    ELSE.
      SELECT SINGLE descript FROM seoclasstx INTO l_descript
          WHERE clsname = l_clsname
          AND langu = sy-langu.
      IF sy-subrc = 0.
        cs_ztadir-descript = l_descript.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_seoclass


*-----------------------------------------------------------------------
* select_t100                                    Message Class
*-----------------------------------------------------------------------
FORM select_t100
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_arbgb TYPE arbgb,
  l_stext TYPE as4text.

  l_arbgb = cs_ztadir-obj_name.
  IF g_add_elem_msag = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    SELECT SINGLE stext FROM t100a INTO l_stext
        WHERE arbgb = l_arbgb.
    IF sy-subrc <> 0.
      cs_ztadir-subrc = gc_subrc_not_found.
    ELSE.
      SELECT SINGLE stext FROM t100t INTO l_stext
          WHERE arbgb = l_arbgb
          AND sprsl = sy-langu.
      cs_ztadir-descript = l_stext.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_t100


*-----------------------------------------------------------------------
* select_tobj                                    Authorization Object
*-----------------------------------------------------------------------
FORM select_tobj
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_objct TYPE xuobject,
  l_ttext TYPE xutext.

  l_objct = cs_ztadir-obj_name.
  IF g_add_elem_tobj = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    SELECT SINGLE objct FROM tobj INTO l_objct
        WHERE objct = l_objct.
    IF sy-subrc <> 0.
      cs_ztadir-subrc = gc_subrc_not_found.
    ELSE.
      SELECT SINGLE ttext FROM tobjt INTO l_ttext
          WHERE object = l_objct
          AND langu = sy-langu.
      IF sy-subrc = 0.
        cs_ztadir-descript = l_ttext.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_tobj


*-----------------------------------------------------------------------
* select_tpara                                   SET/GET Parameter
*-----------------------------------------------------------------------
FORM select_tpara
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_paramid TYPE memoryid,
  l_partext TYPE as4text.

  l_paramid = cs_ztadir-obj_name.
  IF g_add_elem_para = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    SELECT SINGLE partext FROM tpara INTO l_partext
        WHERE paramid = l_paramid.
    IF sy-subrc <> 0.
      cs_ztadir-subrc = gc_subrc_not_found.
    ELSE.
      cs_ztadir-descript = l_partext.
      SELECT SINGLE partext FROM tparat INTO l_partext
          WHERE paramid = l_paramid
          AND sprache = sy-langu.
      IF sy-subrc = 0.
        cs_ztadir-descript = l_partext.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_tpara


*-----------------------------------------------------------------------
* select_tstc                                    Transaction
*-----------------------------------------------------------------------
FORM select_tstc
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_tcode TYPE tcode,
  l_ttext TYPE ttext_stct.

  l_tcode = cs_ztadir-obj_name.
  IF g_add_elem_tran = abap_false.
    cs_ztadir-subrc = gc_subrc_deselected.
  ELSE.
    SELECT SINGLE tcode FROM tstc INTO l_tcode
        WHERE tcode = l_tcode.
    IF sy-subrc <> 0.
      cs_ztadir-subrc = gc_subrc_not_found.
    ELSE.
      SELECT SINGLE ttext FROM tstct INTO l_ttext
          WHERE tcode = l_tcode
          AND sprsl = sy-langu.
      IF sy-subrc = 0.
        cs_ztadir-descript = l_ttext.
      ENDIF.
    ENDIF.
  ENDIF.
ENDFORM.                    "select_tstc


*-----------------------------------------------------------------------
* select_trdir                                   Program/Include
*-----------------------------------------------------------------------
FORM select_trdir
  CHANGING
    cs_ztadir TYPE st_ztadir.

  DATA:
  l_program TYPE sy-repid,
  l_title TYPE rs38m-repti.

  l_program = cs_ztadir-obj_name.
  CALL FUNCTION 'PROGRAM_TITLE'
    EXPORTING
      program  = l_program
      language = sy-langu
    IMPORTING
      title    = l_title.
  cs_ztadir-descript = l_title.
  cs_ztadir-progname = cs_ztadir-obj_name.
  SELECT SINGLE subc FROM trdir INTO cs_ztadir-subc
    WHERE name = cs_ztadir-progname.
  IF sy-subrc <> 0
  OR cs_ztadir-subc NA '1I'.
    cs_ztadir-subrc = gc_subrc_not_found.
  ELSEIF ( cs_ztadir-subc = 'I' AND g_add_elem_incl = abap_false )
  OR ( cs_ztadir-subc = '1' AND g_add_elem_prog = abap_false ).
    cs_ztadir-subrc = gc_subrc_deselected.
  ENDIF.
ENDFORM.                    "select_trdir
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_TEXT_TOOLS                             *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* text_tools
*-----------------------------------------------------------------------
FORM text_tools.
  PERFORM text_tools_text_elements.
  PERFORM text_tools_text_concatenated.
  PERFORM text_tools_text_message.

*tables are not needed any more:
  REFRESH:
  gt_text_element,
  gt_text_element_t.
ENDFORM.                    "text_tools


*-----------------------------------------------------------------------
* text_tools_text_concatenated
*-----------------------------------------------------------------------
FORM text_tools_text_concatenated.
  DATA:
  l_text TYPE string,
  l_str1 TYPE string,
  l_str2 TYPE string.

  FIELD-SYMBOLS:
  <ls_txt> TYPE st_text_element,
  <l_fs> TYPE ANY,
  <l_fs1> TYPE ANY,
  <l_fs2> TYPE ANY.

  LOOP AT gt_text_element ASSIGNING <ls_txt>
      WHERE is_set = abap_false
      AND ( NOT conc_v1 IS INITIAL
            or NOT conc_copula IS INITIAL
            OR NOT conc_v2 IS INITIAL ).
    CLEAR l_str1.
    CLEAR l_str2.
    CLEAR l_text.
    IF NOT <ls_txt>-conc_v1 IS INITIAL.
      ASSIGN (<ls_txt>-conc_v1) TO <l_fs1>.
      l_str1 = <l_fs1>.
      UNASSIGN <l_fs1>.
    ENDIF.
    IF NOT <ls_txt>-conc_v2 IS INITIAL.
      ASSIGN (<ls_txt>-conc_v2) TO <l_fs2>.
      l_str2 = <l_fs2>.
      UNASSIGN <l_fs2>.
    ENDIF.
    IF <ls_txt>-conc_sep_space = abap_false.
      CONCATENATE l_str1 <ls_txt>-conc_copula l_str2
          INTO l_text.
    ELSE.
      CONCATENATE l_str1 <ls_txt>-conc_copula l_str2
          INTO l_text SEPARATED BY space.
    ENDIF.
*Set text
    IF NOT l_text IS INITIAL.
      <ls_txt>-is_set = abap_true.
      ASSIGN (<ls_txt>-fieldname) TO <l_fs>.
      <l_fs> = l_text.
      UNASSIGN <l_fs>.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "text_tools_text_concatenated


*-----------------------------------------------------------------------
* text_tools_text_elements
*-----------------------------------------------------------------------
FORM text_tools_text_elements.
  DATA:
  l_text TYPE string,
  l_val_text TYPE val_text,
  l_str TYPE string.

  FIELD-SYMBOLS:
  <ls_txt> TYPE st_text_element,
  <ls_txtt> TYPE st_text_element_t,
  <l_fs> TYPE ANY.

  LOOP AT gt_text_element ASSIGNING <ls_txt>.
    CLEAR:
    l_text,
    l_str.
*Text from CSV
    READ TABLE gt_text_element_t ASSIGNING <ls_txtt>
        WITH KEY fieldname = <ls_txt>-fieldname
                 spras = sy-langu.
    IF sy-subrc = 0 AND NOT <ls_txtt>-text IS INITIAL.
      <ls_txt>-is_set = abap_true.
      l_text = <ls_txtt>-text.
    ELSE.
*Default text in English from CSV
      READ TABLE gt_text_element_t ASSIGNING <ls_txtt>
          WITH KEY fieldname = <ls_txt>-fieldname
                   spras = 'E'.
      IF sy-subrc = 0.
        l_text = <ls_txtt>-text.
      ENDIF.
    ENDIF.
    UNASSIGN <ls_txtt>.
*Text from data element
    IF <ls_txt>-is_set = abap_false
    AND NOT <ls_txt>-dtel_rollname IS INITIAL.
      PERFORM get_dtel_text
        USING
          <ls_txt>-dtel_rollname
          <ls_txt>-dtel_field
        CHANGING
          l_str.
      IF NOT l_str IS INITIAL.
        <ls_txt>-is_set = abap_true.
        l_text = l_str.
      ENDIF.
    ENDIF.
*Text from domain value
    IF <ls_txt>-is_set = abap_false
    AND NOT <ls_txt>-domname IS INITIAL.
      PERFORM get_dom_value_text
        USING
          <ls_txt>-domname
          <ls_txt>-domvalue
        CHANGING
          l_val_text.
      IF NOT l_val_text IS INITIAL.
        <ls_txt>-is_set = abap_true.
        l_text = l_val_text.
      ENDIF.
    ENDIF.
*Text from icon
    IF <ls_txt>-is_set = abap_false
    AND NOT <ls_txt>-icon_id IS INITIAL.
      PERFORM get_icon_text
        USING
          <ls_txt>-icon_id
          <ls_txt>-icon_field
        CHANGING
          l_str.
      IF NOT l_str IS INITIAL.
        <ls_txt>-is_set = abap_true.
        l_text = l_str.
      ENDIF.
    ENDIF.
*Set text
    IF NOT l_text IS INITIAL.
      ASSIGN (<ls_txt>-fieldname) TO <l_fs>.
      <l_fs> = l_text.
      UNASSIGN <l_fs>.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "text_tools_text_elements


*-----------------------------------------------------------------------
* text_tools_text_message
*-----------------------------------------------------------------------
FORM text_tools_text_message.
  DATA:
  l_text TYPE string,
  l_str1 TYPE string,
  l_str2 TYPE string,
  l_str3 TYPE string,
  l_str4 TYPE string.

  FIELD-SYMBOLS:
  <ls_txt> TYPE st_text_element,
  <l_fs> TYPE ANY,
  <l_fs1> TYPE ANY,
  <l_fs2> TYPE ANY,
  <l_fs3> TYPE ANY,
  <l_fs4> TYPE ANY.

  LOOP AT gt_text_element ASSIGNING <ls_txt>
      WHERE is_set = abap_false
      AND NOT msg_id IS INITIAL.
    CLEAR:
    l_str1,
    l_str2,
    l_str3,
    l_str4,
    l_text.
    IF NOT <ls_txt>-msg_v1 IS INITIAL.
      ASSIGN (<ls_txt>-msg_v1) TO <l_fs1>.
      IF <l_fs1> IS ASSIGNED.
        l_str1 = <l_fs1>.
      ENDIF.
      UNASSIGN <l_fs1>.
    ENDIF.
    IF NOT <ls_txt>-msg_v2 IS INITIAL.
      ASSIGN (<ls_txt>-msg_v2) TO <l_fs2>.
      IF <l_fs2> IS ASSIGNED.
        l_str2 = <l_fs2>.
      ENDIF.
      UNASSIGN <l_fs2>.
    ENDIF.
    IF NOT <ls_txt>-msg_v3 IS INITIAL.
      ASSIGN (<ls_txt>-msg_v3) TO <l_fs3>.
      IF <l_fs3> IS ASSIGNED.
        l_str3 = <l_fs3>.
      ENDIF.
      UNASSIGN <l_fs3>.
    ENDIF.
    IF NOT <ls_txt>-msg_v4 IS INITIAL.
      ASSIGN (<ls_txt>-msg_v4) TO <l_fs4>.
      IF <l_fs4> IS ASSIGNED.
        l_str4 = <l_fs4>.
      ENDIF.
      UNASSIGN <l_fs4>.
    ENDIF.
    PERFORM get_message_text
      USING
        <ls_txt>-msg_id
        <ls_txt>-msg_nr
        l_str1
        l_str2
        l_str3
        l_str4
      CHANGING
        l_text.
*Set text
    IF NOT l_text IS INITIAL.
      <ls_txt>-is_set = abap_true.
      ASSIGN (<ls_txt>-fieldname) TO <l_fs>.
      <l_fs> = l_text.
      UNASSIGN <l_fs>.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "text_tools_text_message
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY__CL_GUI                                *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* cl_gui_get_folder
*-----------------------------------------------------------------------
FORM cl_gui_get_folder
  CHANGING
    c_selected_folder TYPE string
    c_subrc TYPE sysubrc.

  DATA:
  l_obj_file TYPE REF TO cl_gui_frontend_services,
  l_initial_folder TYPE string.

  CREATE OBJECT l_obj_file.

  IF NOT p_folder IS INITIAL.
    l_initial_folder = p_folder.
  ELSE.
    CALL METHOD l_obj_file->get_temp_directory
      CHANGING
        temp_dir = l_initial_folder
      EXCEPTIONS
        OTHERS   = 1.
  ENDIF.

  CALL METHOD l_obj_file->directory_browse
    EXPORTING
      initial_folder  = l_initial_folder
    CHANGING
      selected_folder = c_selected_folder
    EXCEPTIONS
      OTHERS          = 1.
  c_subrc = sy-subrc.
ENDFORM.                    "cl_gui_get_folder
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY__TRY                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* try_create_src_no_includes
*-----------------------------------------------------------------------
FORM try_create_src_no_includes
  USING
    it_src TYPE it_string
    value(i_src_name)
    value(i_progname)
  CHANGING
    ct_src_no_includes TYPE it_string.

  DATA lt_index TYPE it_src_include_index.

  REFRESH ct_src_no_includes.

  TRY.
*      CALL FUNCTION 'CREATE_SOURCE_WITHOUT_INCLUDES'
*        EXPORTING
*          source_i         = it_src
*          source_name      = i_src_name
*          global_check     = abap_true
*          global_program   = i_progname
*          replacing_source = space
*        IMPORTING
*          source_o         = ct_src_no_includes
*        EXCEPTIONS
*          OTHERS           = 1.

      PERFORM get_src_without_includes
        USING
          it_src
          i_src_name
          abap_true
          i_progname
          space
        CHANGING
          ct_src_no_includes
          lt_index.
    CATCH cx_root.
  ENDTRY.
ENDFORM.                    "try_create_src_no_includes


*-----------------------------------------------------------------------
* try_read_report
*-----------------------------------------------------------------------
FORM try_read_report
  USING
    value(i_progname)
  CHANGING
    ct_src TYPE it_string.

  REFRESH ct_src.

  TRY.
      READ REPORT i_progname INTO ct_src STATE 'A'.
    CATCH cx_sy_read_src_line_too_long.
    CATCH cx_root.
  ENDTRY.
ENDFORM.                    "try_read_report

***optional
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_DDIC                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* ddic
*-----------------------------------------------------------------------
FORM ddic.
*DOMA
  PERFORM ddic_r3tr_doma.
*DTEL
  PERFORM ddic_r3tr_dtel.
*ENQU: AGGTYPE = E
  PERFORM ddic_r3tr_enqu.
*SHLP
  PERFORM ddic_r3tr_shlp.
*TABL: TABCLASS = APPEND, INTTAB, VIEW
  PERFORM ddic_r3tr_tabl_1.
*TABL: TABCLASS = CLUSTER, POOL, TRANSP
  PERFORM ddic_r3tr_tabl_2.
*TTYP
  PERFORM ddic_r3tr_ttyp.
*TYPE
  PERFORM ddic_r3tr_type.
*VIEW
  PERFORM ddic_r3tr_view.

ENDFORM.                    "ddic


*-----------------------------------------------------------------------
* ddic_r3tr_doma                                 DomÃÂ¤nen
*-----------------------------------------------------------------------
FORM ddic_r3tr_doma.

  DATA:
  lt_html TYPE it_string,
  lt_tabstrip TYPE it_tabstrip,
  l_domname TYPE domname,
  ls_attributes TYPE st_attributes,
  ls_definition TYPE st_definition_1,
  ls_value_range TYPE st_value_range,
  lt_value_range TYPE it_value_range,
  ls_dd01v TYPE dd01v,
  ls_dd01v_n TYPE dd01v,
  lt_dd07v TYPE STANDARD TABLE OF dd07v,
  lt_dd07v_n TYPE STANDARD TABLE OF dd07v,
  l_state TYPE dcdomaget,
  lt_doc TYPE it_string.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_dd07v> TYPE dd07v,
  <ls_tabstrip> TYPE st_tabstrip.

  PERFORM get_tabstrip
    USING 'DDIC_R3TR_DOMA' space
    CHANGING lt_tabstrip.

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

    CLEAR:
    ls_attributes.

    REFRESH:
    lt_html,
    lt_value_range,
    lt_dd07v,
    lt_dd07v_n,
    lt_doc.

    l_domname = <ls_ztadir>-obj_name.
    CALL FUNCTION 'DD_DOMA_GET'
      EXPORTING
        domain_name = l_domname
        langu       = sy-langu
        withtext    = abap_true
      IMPORTING
        dd01v_wa_a  = ls_dd01v
        dd01v_wa_n  = ls_dd01v_n
        got_state   = l_state
      TABLES
        dd07v_tab_a = lt_dd07v
        dd07v_tab_n = lt_dd07v_n
      EXCEPTIONS
        OTHERS      = 1.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.
    ls_attributes-bname = ls_dd01v-as4user.
    PERFORM get_date
      USING
        ls_dd01v-as4date
      CHANGING
        ls_attributes-date_last_changed.
    ls_attributes-devclass = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        ls_attributes-devclass_descr.
    IF ls_dd01v-dommaster IS INITIAL.
      SELECT SINGLE masterlang FROM tadir INTO ls_dd01v-dommaster
          WHERE pgmid = 'R3TR'
          AND object = 'DOMA'
          AND obj_name = l_domname.
    ENDIF.
    PERFORM get_spras
      USING
        ls_dd01v-dommaster
      CHANGING
        ls_attributes-laiso
        ls_attributes-sptxt.
    PERFORM get_user
      USING
        ls_dd01v-as4user
      CHANGING
        ls_attributes-name_text.

    ls_definition-datatype = ls_dd01v-datatype.
    PERFORM get_dom_value_text
      USING
        'DATATYPE'
        ls_dd01v-datatype
      CHANGING
        ls_definition-datadescr.
    ls_definition-dataleng = ls_dd01v-leng.
    ls_definition-datadeci = ls_dd01v-decimals.
    ls_definition-outputlen = ls_dd01v-outputlen.
    ls_definition-convexit = ls_dd01v-convexit.
    ls_definition-signflag = ls_dd01v-signflag.
    ls_definition-lowercase = ls_dd01v-lowercase.

    SORT lt_dd07v BY valpos.
    LOOP AT lt_dd07v ASSIGNING <ls_dd07v>.
      ls_value_range-ddtext = <ls_dd07v>-ddtext.
      IF <ls_dd07v>-domval_ld IS INITIAL.
        ls_value_range-domvalue_l = <ls_dd07v>-domvalue_l.
      ELSE.
        ls_value_range-domvalue_l = <ls_dd07v>-domval_ld.
      ENDIF.
      IF <ls_dd07v>-domval_hd IS INITIAL.
        ls_value_range-domvalue_h = <ls_dd07v>-domval_hd.
      ELSE.
        ls_value_range-domvalue_h = <ls_dd07v>-domvalue_h.
      ENDIF.
      APPEND ls_value_range TO lt_value_range.
    ENDLOOP.
*doma documentation
    PERFORM get_docu
      USING
        'DO'
        <ls_ztadir>-obj_name
        'T'
      CHANGING
        lt_doc.
***
    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'DOC'.
          IF lt_doc IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
      ENDCASE.
    ENDLOOP.
*HTML header
    PERFORM html_main_header
      USING
        tpt_ddic_doma
        txt_domain
        <ls_ztadir>-obj_name
        txt_active___1
        txt_short_text___2
        <ls_ztadir>-descript
        space
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*HTML 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.
*HTML attributes
    PERFORM html_add_attributes_1
      USING
        ls_attributes
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
*HTML definition
    PERFORM html_add_definition_1
      USING
        ls_definition
        'DEFINITION'
        abap_true
      CHANGING
        lt_html.
*HTML value range
    PERFORM html_add_value_range
      USING
        lt_value_range
        'VALUERANGE'
        abap_false
      CHANGING
        lt_html.
*HTML footer
    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_doma


*-----------------------------------------------------------------------
* ddic_r3tr_dtel                                 Datenelemente
*-----------------------------------------------------------------------
FORM ddic_r3tr_dtel.

  DATA:
  lt_html TYPE it_string,
  lt_tabstrip TYPE it_tabstrip,
  ls_tabstrip TYPE st_tabstrip,
  l_rollname TYPE rollname,
  ls_attributes TYPE st_attributes,
  ls_data_type TYPE st_data_type,
  ls_further_char TYPE st_further_char,
  ls_field_label TYPE st_field_label,
  lt_para TYPE tpara,
  ls_dd01l TYPE dd01l,
  lt_dd03p TYPE STANDARD TABLE OF dd03p,
  ls_dd04l TYPE dd04l,
  ls_dd04l_n TYPE dd04l,
  lt_dd04t TYPE STANDARD TABLE OF dd04t,
  ls_dd04t TYPE dd04t,
  lt_dd04t_n TYPE STANDARD TABLE OF dd04t,
  l_state TYPE ddrefstruc-state,
  lt_doc TYPE it_string,
  lt_docdz TYPE STANDARD TABLE OF docdz,
  l_tab_nr TYPE i,
  l_tab_id TYPE string,
  l_doc_obj TYPE doku_obj,
  l_active TYPE flag.

  FIELD-SYMBOLS:
  <l_dataleng> TYPE ANY,
  <l_datatype> TYPE ANY,
  <l_decimals> TYPE ANY,
  <l_refkind> TYPE ANY,
  <l_reftype> TYPE ANY,
  <ls_ztadir> TYPE st_ztadir,
  <ls_dd03p> TYPE dd03p,
  <ls_tabstrip> TYPE st_tabstrip,
  <ls_docdz> TYPE docdz.

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

    CLEAR:
    ls_attributes.

    REFRESH:
    lt_html,
    lt_tabstrip,
    lt_dd04t,
    lt_dd04t_n,
    lt_doc,
    lt_docdz.

    l_rollname = <ls_ztadir>-obj_name.
    CALL FUNCTION 'DD_DTEL_GET'
      EXPORTING
        roll_name   = l_rollname
        langu       = sy-langu
        withtext    = abap_true
      IMPORTING
        got_state   = l_state
        dd04l_wa_a  = ls_dd04l
        dd04l_wa_n  = ls_dd04l_n
        dd01l_wa    = ls_dd01l
        tpara_wa    = lt_para
      TABLES
        dd04t_tab_a = lt_dd04t
        dd04t_tab_n = lt_dd04t_n
      EXCEPTIONS
        OTHERS      = 1.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.
    READ TABLE lt_dd04t INTO ls_dd04t INDEX 1.
*attributes
    ls_attributes-bname = ls_dd04l-as4user.
    PERFORM get_date
      USING
        ls_dd04l-as4date
      CHANGING
        ls_attributes-date_last_changed.
    ls_attributes-devclass = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        ls_attributes-devclass_descr.
    IF ls_dd04l-dtelmaster IS INITIAL.
      SELECT SINGLE masterlang FROM tadir INTO ls_dd04l-dtelmaster
          WHERE pgmid = 'R3TR'
          AND object = 'DTEL'
          AND obj_name = l_rollname.
    ENDIF.
    PERFORM get_spras
      USING
        ls_dd04l-dtelmaster
      CHANGING
        ls_attributes-laiso
        ls_attributes-sptxt.
    PERFORM get_user
      USING
        ls_dd04l-as4user
      CHANGING
        ls_attributes-name_text.
*data type
    ls_data_type-domname = ls_dd04l-domname.
    PERFORM get_dom
      USING
        ls_data_type-domname
      CHANGING
        ls_data_type-domdescr.
    ASSIGN COMPONENT 'DATATYPE' OF STRUCTURE ls_dd04l TO <l_datatype>.
    IF <l_datatype> IS ASSIGNED.
      ls_data_type-datatype = <l_datatype>.
      UNASSIGN <l_datatype>.
    ENDIF.
    PERFORM get_dom_value_text
      USING
        'DATATYPE'
        ls_dd04l-domname
      CHANGING
        ls_data_type-datadescr.
    ASSIGN COMPONENT 'LENG' OF STRUCTURE ls_dd04l TO <l_dataleng>.
    IF <l_dataleng> IS ASSIGNED.
      ls_data_type-dataleng = <l_dataleng>.
      UNASSIGN <l_dataleng>.
    ENDIF.
    ASSIGN COMPONENT 'DECIMALS' OF STRUCTURE ls_dd04l TO <l_decimals>.
    IF <l_decimals> IS ASSIGNED.
      ls_data_type-datadeci = <l_decimals>.
      UNASSIGN <l_decimals>.
    ENDIF.
    ASSIGN COMPONENT 'REFKIND' OF STRUCTURE ls_dd04l TO <l_refkind>.
    IF <l_refkind> IS ASSIGNED.
      ls_data_type-refkind = <l_refkind>.
      UNASSIGN <l_refkind>.
    ENDIF.
    ASSIGN COMPONENT 'REFTYPE' OF STRUCTURE ls_dd04l TO <l_reftype>.
    IF <l_reftype> IS ASSIGNED.
      ls_data_type-reftype = <l_reftype>.
      UNASSIGN <l_reftype>.
    ELSE.
      ls_data_type-reftype = '#'.  "R/3 4.6 does not know ref type
    ENDIF.
*further char
    ls_further_char-shlpname = ls_dd04l-shlpname.
    ls_further_char-shlpfield = ls_dd04l-shlpfield.
    ls_further_char-memoryid = ls_dd04l-memoryid.
    ls_further_char-deffdname = ls_dd04l-deffdname.
    ls_further_char-logflag = ls_dd04l-logflag.
*field label
    ls_field_label-scrlen_s = ls_dd04l-scrlen1.
    ls_field_label-scrtext_s = ls_dd04t-scrtext_s.
    ls_field_label-scrlen_m = ls_dd04l-scrlen2.
    ls_field_label-scrtext_m = ls_dd04t-scrtext_m.
    ls_field_label-scrlen_l = ls_dd04l-scrlen3.
    ls_field_label-scrtext_l = ls_dd04t-scrtext_l.
    ls_field_label-headlen = ls_dd04l-headlen.
    ls_field_label-reptext = ls_dd04t-reptext.
*dtel documentation
    PERFORM get_docu
      USING
        'DE'
        <ls_ztadir>-obj_name
        'E'
      CHANGING
        lt_doc.
*supplementary documentation
    CALL FUNCTION 'DOCU_GET_DZ'
      EXPORTING
        langu    = sy-langu
        rollname = l_rollname
      TABLES
        dz_list  = lt_docdz
      EXCEPTIONS
        OTHERS   = 1.
    SORT lt_docdz BY addition.
***
    PERFORM get_tabstrip
      USING 'DDIC_R3TR_DTEL' space
      CHANGING lt_tabstrip.
    SORT lt_tabstrip BY tab_nr DESCENDING.
    READ TABLE lt_tabstrip ASSIGNING <ls_tabstrip> INDEX 1.
    l_tab_nr = <ls_tabstrip>-tab_nr.
    SORT lt_tabstrip BY tab_nr.
    CLEAR ls_tabstrip.
    ls_tabstrip-active_order = 1.
    LOOP AT lt_docdz ASSIGNING <ls_docdz>.
      l_tab_nr = l_tab_nr + 1.
      ls_tabstrip-form = 'DDIC_R3TR_DTEL'.
      CONCATENATE 'DOCDZ_' <ls_docdz>-addition INTO ls_tabstrip-id.
      ls_tabstrip-parent_id = 'DOCDZ'.
      ls_tabstrip-tab_nr = l_tab_nr.
      ls_tabstrip-text = <ls_docdz>-addition.
      APPEND ls_tabstrip TO lt_tabstrip.
      CLEAR ls_tabstrip.
    ENDLOOP.
    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'DOC'.
          IF lt_doc IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'DOCDZ'.
          IF lt_docdz IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
      ENDCASE.
    ENDLOOP.
*HTML header
    PERFORM html_main_header
      USING
        tpt_ddic_dtel
        txt_data_element___1
        <ls_ztadir>-obj_name
        txt_active___1
        txt_short_text___2
        <ls_ztadir>-descript
        space
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*HTML 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.
*HTML supplementary documentation
    IF NOT lt_docdz IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_container_begin
        USING
          lt_tabstrip
          'DOCDZ'
          abap_false
        CHANGING
          lt_html.
      l_active = abap_true.
      LOOP AT lt_docdz ASSIGNING <ls_docdz>.
        CLEAR: l_tab_id, l_doc_obj.
        REFRESH lt_doc.
        CONCATENATE 'DOCDZ_' <ls_docdz>-addition INTO l_tab_id.
        CALL FUNCTION 'DOCU_OBJECT_NAME_CONCATENATE'
          EXPORTING
            docu_id  = 'DZ'
            element  = <ls_docdz>-rollname
            addition = <ls_docdz>-addition
          IMPORTING
            object   = l_doc_obj.
        PERFORM get_docu
          USING
            'DZ'
            l_doc_obj
            'E'
          CHANGING
            lt_doc.
        PERFORM html_add_doc
          USING
            lt_doc
            l_tab_id
            l_active
          CHANGING
            lt_html.
        l_active = abap_false.
      ENDLOOP.
      PERFORM html_add_container_end
        CHANGING
          lt_html.
    ENDIF.
*HTML attributes
    PERFORM html_add_attributes_1
      USING
        ls_attributes
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
*HTML data type
    PERFORM html_add_data_type
      USING
        ls_data_type
        'DATATYPE'
        abap_true
      CHANGING
        lt_html.
*HTML further char
    PERFORM html_add_further_char
      USING
        ls_further_char
        'FURTHERCHAR'
        abap_false
      CHANGING
        lt_html.
*HTML field label
    PERFORM html_add_field_label
      USING
        ls_field_label
        'FIELDLABEL'
        abap_false
      CHANGING
        lt_html.
*HTML footer
    PERFORM html_main_footer
      USING
        lt_html.

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


*-----------------------------------------------------------------------
* ddic_r3tr_enqu                                 Aggregat-Header
*                                                         (Sperrobjekte)
*-----------------------------------------------------------------------
FORM ddic_r3tr_enqu.

  DATA:
  lt_html TYPE it_string,
  lt_tabstrip TYPE it_tabstrip,
  l_viewname TYPE viewname,
  ls_attributes TYPE st_attributes,
  lt_tables TYPE it_tables,
  ls_tables TYPE st_tables,
  ls_dd25v TYPE dd25v,
  ls_dd25v_n TYPE dd25v,
  lt_dd26v TYPE STANDARD TABLE OF dd26v,
  lt_dd26v_n TYPE STANDARD TABLE OF dd26v,
  lt_dd27p TYPE STANDARD TABLE OF dd27p,
  lt_dd27p_n TYPE STANDARD TABLE OF dd27p,
  l_state TYPE dcenquget.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_dd27p> TYPE dd27p.

  PERFORM get_tabstrip
    USING 'DDIC_R3TR_ENQU' space
    CHANGING lt_tabstrip.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'ENQU'
      AND aggtype = 'E'
      AND downloaded = abap_false.
    <ls_ztadir>-downloaded = abap_true.

    CLEAR:
    ls_attributes.

    REFRESH:
    lt_html,
    lt_dd26v,
    lt_dd26v_n,
    lt_dd27p,
    lt_dd27p_n.

    l_viewname = <ls_ztadir>-obj_name.
    CALL FUNCTION 'DD_ENQU_GET'
      EXPORTING
        enqu_name   = l_viewname
        langu       = sy-langu
        withtext    = abap_true
      IMPORTING
        dd25v_wa_a  = ls_dd25v
        dd25v_wa_n  = ls_dd25v_n
        got_state   = l_state
      TABLES
        dd26v_tab_a = lt_dd26v
        dd26v_tab_n = lt_dd26v_n
        dd27p_tab_a = lt_dd27p
        dd27p_tab_n = lt_dd27p_n
      EXCEPTIONS
        OTHERS      = 1.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.
*attributes
    ls_attributes-bname = ls_dd25v-as4user.
    PERFORM get_date
      USING
        ls_dd25v-as4date
      CHANGING
        ls_attributes-date_last_changed.
    ls_attributes-devclass = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        ls_attributes-devclass_descr.
    IF ls_dd25v-masterlang IS INITIAL.
      SELECT SINGLE masterlang FROM tadir INTO ls_dd25v-masterlang
          WHERE pgmid = 'R3TR'
          AND object = 'ENQU'
          AND obj_name = l_viewname.
    ENDIF.
    PERFORM get_spras
      USING
        ls_dd25v-masterlang
      CHANGING
        ls_attributes-laiso
        ls_attributes-sptxt.
    PERFORM get_user
      USING
        ls_dd25v-as4user
      CHANGING
        ls_attributes-name_text.
    ls_attributes-display_rfcenable = abap_true.
    ls_attributes-rfcenable = ls_dd25v-globalflag.

    SORT lt_dd27p BY viewname objpos.
    LOOP AT lt_dd27p ASSIGNING <ls_dd27p>
        WHERE fieldname = '*'.
      CLEAR ls_tables.
      IF <ls_dd27p>-tabname = ls_dd25v-roottab.
        ls_tables-primary = abap_true.
      ENDIF.
      ls_tables-tabname = <ls_dd27p>-tabname.
      PERFORM get_dom_value_text
        USING
          'ENQMODE'
          <ls_dd27p>-enqmode
        CHANGING
          ls_tables-enqmode.
      APPEND ls_tables TO lt_tables.
    ENDLOOP.


    PERFORM html_main_header
      USING
        tpt_ddic_enqu
        txt_lock_object___1
        <ls_ztadir>-obj_name
        txt_active___1
        txt_short_text___2
        <ls_ztadir>-descript
        space
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
    PERFORM html_add_attributes_1
      USING
        ls_attributes
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
    PERFORM html_add_tables
      USING
        lt_tables
        'TABLES'
        abap_true
      CHANGING
        lt_html.

    DELETE lt_dd27p WHERE fieldname = '*'.
    PERFORM html_add_table
      USING
        'ENQU_PARAM'
        lt_dd27p
        lt_dd27p
        'LOCKPARAMETER'
        abap_false
      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_enqu_e


*-----------------------------------------------------------------------
* ddic_r3tr_shlp                                 Suchhilfen
*-----------------------------------------------------------------------
FORM ddic_r3tr_shlp.

  DATA:
  lt_html TYPE it_string,
  l_shlpname TYPE shlpname,
  ls_dd30v TYPE dd30v,
  ls_dd30v_n TYPE dd30v,
  lt_dd31v TYPE STANDARD TABLE OF dd31v,
  lt_dd31v_n TYPE STANDARD TABLE OF dd31v,
  lt_dd32p TYPE STANDARD TABLE OF dd32p,
  lt_dd32p_n TYPE STANDARD TABLE OF dd32p,
  lt_dd33v TYPE STANDARD TABLE OF dd33v,
  lt_dd33v_n TYPE STANDARD TABLE OF dd33v,
  ls_attributes TYPE st_attributes,
  lt_tabstrip TYPE it_tabstrip,
  ls_definition TYPE st_definition_2,
  l_state TYPE dcshlpget.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_dd07v> TYPE dd07v.

  PERFORM get_tabstrip
    USING 'DDIC_R3TR_SHLP' space
    CHANGING lt_tabstrip.

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

    CLEAR:
    ls_attributes,
    ls_definition.

    REFRESH:
    lt_html,
    lt_dd31v,
    lt_dd31v_n,
    lt_dd32p,
    lt_dd32p_n,
    lt_dd33v,
    lt_dd33v_n.


    l_shlpname = <ls_ztadir>-obj_name.
    CALL FUNCTION 'DD_SHLP_GET'
      EXPORTING
        shlp_name    = l_shlpname
        langu        = sy-langu
        withtext     = abap_true
        add_typeinfo = abap_true
      IMPORTING
        dd30v_wa_a   = ls_dd30v
        dd30v_wa_n   = ls_dd30v_n
        got_state    = l_state
      TABLES
        dd31v_tab_a  = lt_dd31v
        dd31v_tab_n  = lt_dd31v_n
        dd32p_tab_a  = lt_dd32p
        dd32p_tab_n  = lt_dd32p_n
        dd33v_tab_a  = lt_dd33v
        dd33v_tab_n  = lt_dd33v_n
      EXCEPTIONS
        OTHERS       = 1.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.
    ls_attributes-bname = ls_dd30v-as4user.
    PERFORM get_date
      USING
        ls_dd30v-as4date
      CHANGING
        ls_attributes-date_last_changed.
    ls_attributes-devclass = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        ls_attributes-devclass_descr.
    IF ls_dd30v-ddlanguage IS INITIAL.
      SELECT SINGLE masterlang FROM tadir INTO ls_dd30v-ddlanguage
          WHERE pgmid = 'R3TR'
          AND object = 'SHLP'
          AND obj_name = l_shlpname.
    ENDIF.
    PERFORM get_spras
      USING
        ls_dd30v-ddlanguage
      CHANGING
        ls_attributes-laiso
        ls_attributes-sptxt.
    PERFORM get_user
      USING
        ls_dd30v-as4user
      CHANGING
        ls_attributes-name_text.

    ls_definition-selmethod = ls_dd30v-selmethod.
    ls_definition-texttab = ls_dd30v-texttab.
    ls_definition-dialogtype = ls_dd30v-dialogtype.
    ls_definition-hotkey = ls_dd30v-hotkey.
    ls_definition-selmexit = ls_dd30v-selmexit.

    PERFORM html_main_header
      USING
        tpt_ddic_shlp
        txt_elementary_srch_hlp
        <ls_ztadir>-obj_name
        txt_active___1
        txt_short_text___2
        <ls_ztadir>-descript
        space
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
    PERFORM html_add_attributes_1
      USING
        ls_attributes
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
    PERFORM html_add_definition_2
      USING
        ls_definition
        'SHLP_PARAM'
        lt_dd32p
        'DEFINITION'
        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_shlp


*-----------------------------------------------------------------------
* ddic_r3tr_tabl_1                               SAP-Tabellen
*                                                           (Strukturen)
*-----------------------------------------------------------------------
FORM ddic_r3tr_tabl_1.

  DATA:
  lt_html TYPE it_string,
  lt_tabstrip TYPE it_tabstrip,
  ls_attributes TYPE st_attributes,
  ls_deliv_maint TYPE st_deliv_maint,
  ls_dd02v TYPE dd02v,
  lt_dd03p TYPE STANDARD TABLE OF dd03p,
  ls_dd09l TYPE dd09l,
  lt_zdd03p_ext TYPE it_zdd03p_ext,
  l_state TYPE dctablget,
  lt_doc TYPE it_string,
  lt_ddranking TYPE it_dom_value,
  lt_exclass TYPE it_access,
  ls_exclass TYPE st_access.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_ddranking> TYPE st_dom_value,
  <ls_tabstrip> TYPE st_tabstrip,
  <l_exclass> TYPE ANY.

  PERFORM get_tabstrip
    USING 'DDIC_R3TR_TABL_1' space
    CHANGING lt_tabstrip.
  PERFORM get_dom_value_texts
    USING 'DDRANKING'
    CHANGING lt_ddranking.
  SORT lt_ddranking BY value DESCENDING.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'TABL'
      AND ( tabclass = 'INTTAB'
        OR tabclass = 'VIEW'
        OR tabclass = 'APPEND' )
      AND downloaded = abap_false.
    <ls_ztadir>-downloaded = abap_true.

    CLEAR:
    ls_attributes.

    REFRESH:
    lt_html,
    lt_dd03p,
    lt_doc,
    lt_exclass.

    PERFORM ddic_r3tr_tabl_get
      CHANGING
        <ls_ztadir>
        ls_dd02v
        lt_dd03p
        lt_zdd03p_ext
        ls_dd09l.

    ls_attributes-bname = ls_dd02v-as4user.
    PERFORM get_date
      USING
        ls_dd02v-as4date
      CHANGING
        ls_attributes-date_last_changed.
    ls_attributes-devclass = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        ls_attributes-devclass_descr.
    PERFORM get_spras
      USING
        ls_dd02v-masterlang
      CHANGING
        ls_attributes-laiso
        ls_attributes-sptxt.
    PERFORM get_user
      USING
        ls_dd02v-as4user
      CHANGING
        ls_attributes-name_text.

    ls_deliv_maint-contflag = ls_dd02v-contflag.
    PERFORM get_dom_value_text
      USING
        'CONTFLAG'
        ls_dd02v-contflag
      CHANGING
        ls_deliv_maint-contflag_text.
    PERFORM get_dom_value_text
      USING
        'MAINTFLAG'
        ls_dd02v-mainflag
      CHANGING
        ls_deliv_maint-mainflag_text.
*enhancement category
    ASSIGN COMPONENT 'EXCLASS' OF STRUCTURE ls_dd02v TO <l_exclass>.
    IF <l_exclass> IS ASSIGNED.
      LOOP AT lt_ddranking ASSIGNING <ls_ddranking>.
        ls_exclass-ddtext = <ls_ddranking>-text.
        ls_exclass-checked = abap_false.
        IF <ls_ddranking>-value = <l_exclass>.
          ls_exclass-checked = abap_true.
        ENDIF.
        APPEND ls_exclass TO lt_exclass.
      ENDLOOP.
    ENDIF.
*documentation
    PERFORM get_docu
      USING
        'TB'
        <ls_ztadir>-obj_name
        'E'
      CHANGING
        lt_doc.
***
    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'DOC'.
          IF lt_doc IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'EXCLASS'.
          IF lt_exclass IS INITIAL.
            <ls_tabstrip>-hidden = abap_true.
          ENDIF.
      ENDCASE.
    ENDLOOP.
*HTML header
    PERFORM html_main_header
      USING
        tpt_ddic_stru
        txt_structure
        <ls_ztadir>-obj_name
        txt_active___1
        txt_short_text___2
        <ls_ztadir>-descript
        space
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*HTML enhancement category
    IF NOT lt_exclass IS INITIAL.
      PERFORM html_add_box_radiobuttons
        USING
          txt_enhancement_category_for_s
          'EXCLASS'
          lt_exclass
          'EXCLASS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*HTML 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.
*HTML attributes
    PERFORM html_add_attributes_1
      USING
        ls_attributes
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
*HTML components
    PERFORM html_add_table
      USING
        'TABL1COMPO'
        lt_dd03p
        lt_zdd03p_ext
        'COMPONENTS'
        abap_true
      CHANGING
        lt_html.
*HTML entry help check
    PERFORM html_add_table
      USING
        'TABL1ENTRY'
        lt_dd03p
        lt_zdd03p_ext
        'ENTRY_HELP_CHECK'
        abap_false
      CHANGING
        lt_html.
*HTML curr quant fields
    PERFORM html_add_table
      USING
        'TABL1CURRQ'
        lt_dd03p
        lt_zdd03p_ext
        'CURR_QUANT_FIELDS'
        abap_false
      CHANGING
        lt_html.
*HTML footer
    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_tabl_1


*-----------------------------------------------------------------------
* ddic_r3tr_tabl_2                               SAP-Tabellen
*                                                    (Datenbanktabellen)
*-----------------------------------------------------------------------
FORM ddic_r3tr_tabl_2.

  DATA:
  lt_html TYPE it_string,
  lt_tabstrip TYPE it_tabstrip,
  l_name_value TYPE string,
  ls_attributes TYPE st_attributes,
  ls_deliv_maint TYPE st_deliv_maint,
  lt_access TYPE it_access,
  ls_dd02v TYPE dd02v,
  lt_dd03p TYPE STANDARD TABLE OF dd03p,
  ls_dd09l TYPE dd09l,
  lt_zdd03p_ext TYPE it_zdd03p_ext,
  l_state TYPE dctablget,
  lt_doc TYPE it_string,
  lt_ddranking TYPE it_dom_value,
  lt_exclass TYPE it_access,
  ls_exclass TYPE st_access,
  l_texttabname TYPE tabname,
  l_text_obj_name TYPE sobj_name,
  l_text_devclass TYPE devclass,
  lt_link TYPE it_link,
  ls_link TYPE st_link,
  lt_csv TYPE it_string,
  lt_xml TYPE it_string,
  lt_ts_params TYPE it_textinput,
  lt_ts_buffer TYPE it_access,
  lt_ts_buffer_type_l TYPE it_textinput,
  lt_ts_buffer_type_r TYPE it_textinput,
  lt_ts_bottom TYPE it_textinput,
  ls_textinput TYPE st_textinput,
  ls_access TYPE st_access,
  l_ddtext TYPE ddtext,
  lt_dom_value TYPE it_dom_value,
  lt_tmg_tech_details TYPE it_textinput,
  ls_tddat TYPE tddat,
  ls_tbrgt TYPE tbrgt,
  ls_tvdir TYPE tvdir,
  ls_objh TYPE objh,
  l_compare_flag TYPE string,
  lt_str TYPE it_string.


  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_ddranking> TYPE st_dom_value,
  <ls_tabstrip> TYPE st_tabstrip,
  <l_exclass> TYPE ANY,
  <ls_dom_value> TYPE st_dom_value.

  PERFORM get_tabstrip
    USING 'DDIC_R3TR_TABL_2' space
    CHANGING lt_tabstrip.
  PERFORM get_dom_value_texts
    USING 'DDRANKING'
    CHANGING lt_ddranking.
  SORT lt_ddranking BY value DESCENDING.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'TABL'
      AND ( tabclass = 'CLUSTER'
        OR tabclass = 'POOL'
        OR tabclass = 'TRANSP' )
      AND downloaded = abap_false.
    <ls_ztadir>-downloaded = abap_true.

    CLEAR:
    ls_attributes,
    l_state,
    l_texttabname,
    l_text_obj_name,
    l_text_devclass,
    ls_textinput,
    l_ddtext,
    ls_tddat,
    ls_tbrgt,
    ls_tvdir,
    ls_objh,
    l_compare_flag.

    REFRESH:
    lt_html,
    lt_doc,
    lt_exclass,
    lt_link,
    lt_csv,
    lt_xml,
    lt_ts_params,
    lt_ts_buffer,
    lt_ts_buffer_type_l,
    lt_ts_buffer_type_r,
    lt_ts_bottom,
    lt_tmg_tech_details.

    PERFORM ddic_r3tr_tabl_get
      CHANGING
        <ls_ztadir>
        ls_dd02v
        lt_dd03p
        lt_zdd03p_ext
        ls_dd09l.

    l_tabname = <ls_ztadir>-obj_name.

*attributes
    ls_attributes-bname = ls_dd02v-as4user.
    PERFORM get_date
      USING
        ls_dd02v-as4date
      CHANGING
        ls_attributes-date_last_changed.
    ls_attributes-devclass = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        ls_attributes-devclass_descr.
    PERFORM get_spras
      USING
        ls_dd02v-masterlang
      CHANGING
        ls_attributes-laiso
        ls_attributes-sptxt.
    PERFORM get_user
      USING
        ls_dd02v-as4user
      CHANGING
        ls_attributes-name_text.
*deliv maint
    ls_deliv_maint-sqltab = ls_dd02v-sqltab.
    ls_deliv_maint-display_cont = abap_true.
    ls_deliv_maint-contflag = ls_dd02v-contflag.
    PERFORM get_dom_value_text
      USING
        'CONTFLAG'
        ls_dd02v-contflag
      CHANGING
        ls_deliv_maint-contflag_text.
    ls_deliv_maint-display_main = abap_true.
    PERFORM get_dom_value_text
      USING
        'MAINTFLAG'
        ls_dd02v-mainflag
      CHANGING
        ls_deliv_maint-mainflag_text.
*technical settings
*   logical storage parameters
    CLEAR ls_textinput.
    ls_textinput-name = txt_data_class.
    ls_textinput-value = ls_dd09l-tabart.
    SELECT SINGLE darttext FROM dartt INTO l_ddtext
      WHERE tabart = ls_dd09l-tabart
      AND ddlangu = sy-langu.
    ls_textinput-description = l_ddtext.
    ls_textinput-input = abap_true.
    APPEND ls_textinput TO lt_ts_params.
    CLEAR ls_textinput.
    ls_textinput-name = txt_size_category.
    ls_textinput-value = ls_dd09l-tabkat.
    ls_textinput-input = abap_true.
    APPEND ls_textinput TO lt_ts_params.
*   buffering
    PERFORM get_dom_value_texts
      USING 'BUFALLOW'
      CHANGING lt_dom_value.
    LOOP AT lt_dom_value ASSIGNING <ls_dom_value>.
      CLEAR ls_access.
      ls_access-ddtext = <ls_dom_value>-text.
      IF <ls_dom_value>-value = ls_dd09l-bufallow.
        ls_access-checked = abap_true.
      ENDIF.
      APPEND ls_access TO lt_ts_buffer.
    ENDLOOP.
*   buffering type
    CLEAR ls_textinput.
    ls_textinput-name = txt_single_records_buff.
    IF ls_dd09l-pufferung = 'P'.
      ls_textinput-value = abap_true.
    ENDIF.
    ls_textinput-flag = abap_true.
    APPEND ls_textinput TO lt_ts_buffer_type_l.
    CLEAR ls_textinput.
    ls_textinput-name = txt_generic_area_buffered.
    IF ls_dd09l-pufferung = 'G'.
      ls_textinput-value = abap_true.
    ENDIF.
    ls_textinput-flag = abap_true.
    APPEND ls_textinput TO lt_ts_buffer_type_l.
    CLEAR ls_textinput.
    ls_textinput-name = txt_fully_buffered.
    IF ls_dd09l-pufferung = 'X'.
      ls_textinput-value = abap_true.
    ENDIF.
    ls_textinput-flag = abap_true.
    APPEND ls_textinput TO lt_ts_buffer_type_l.
    CLEAR ls_textinput.
    ls_textinput-space = abap_true.
    APPEND ls_textinput TO lt_ts_buffer_type_r.
    CLEAR ls_textinput.
    ls_textinput-name = txt_no_of_key_fields.
    PERFORM get_unpacked
      USING ls_dd09l-schfeldanz
      CHANGING ls_textinput-value.
    ls_textinput-input = abap_true.
    APPEND ls_textinput TO lt_ts_buffer_type_r.
    CLEAR ls_textinput.
    ls_textinput-space = abap_true.
    APPEND ls_textinput TO lt_ts_buffer_type_r.
*   bottom
    CLEAR ls_textinput.
    ls_textinput-name = txt_log_data_changes.
    ls_textinput-value = ls_dd09l-protokoll.
    ls_textinput-flag = abap_true.
    APPEND ls_textinput TO lt_ts_bottom.
*enhancement category
    ASSIGN COMPONENT 'EXCLASS' OF STRUCTURE ls_dd02v TO <l_exclass>.
    IF <l_exclass> IS ASSIGNED.
      LOOP AT lt_ddranking ASSIGNING <ls_ddranking>.
        ls_exclass-ddtext = <ls_ddranking>-text.
        ls_exclass-checked = abap_false.
        IF <ls_ddranking>-value = <l_exclass>.
          ls_exclass-checked = abap_true.
        ENDIF.
        APPEND ls_exclass TO lt_exclass.
      ENDLOOP.
    ENDIF.
*Table Maintenance Generator
    SELECT SINGLE * FROM tvdir INTO ls_tvdir
        WHERE tabname = l_tabname.
    SELECT SINGLE * FROM objh INTO ls_objh
        WHERE objectname = l_tabname
        AND objecttype = 'S'.
*   technical dialog details
    SELECT SINGLE * FROM tddat INTO ls_tddat
        WHERE tabname = l_tabname.
    SELECT SINGLE * FROM tbrgt INTO ls_tbrgt
        WHERE brgru = ls_tddat-cclass
        AND spras = sy-langu.
*
    CLEAR ls_textinput.
    ls_textinput-name = txt_authorization_group.
    ls_textinput-value = ls_tddat-cclass.
    PERFORM encode_html CHANGING ls_textinput-value.
    ls_textinput-input = abap_true.
    ls_textinput-description = ls_tbrgt-bezei.
    PERFORM encode_html CHANGING ls_textinput-description.
    APPEND ls_textinput TO lt_tmg_tech_details.
*
    CLEAR ls_textinput.
    ls_textinput-name = txt_authorization_object___1.
    ls_textinput-value = ls_tbrgt-brobj.
    APPEND ls_textinput TO lt_tmg_tech_details.
*
    CLEAR ls_textinput.
    ls_textinput-name = txt_function_group.
    ls_textinput-value = ls_tvdir-area.
    ls_textinput-input = abap_true.
    APPEND ls_textinput TO lt_tmg_tech_details.
*
    CLEAR ls_textinput.
    ls_textinput-name = txt_package.
    ls_textinput-value = ls_tvdir-devclass.
    ls_textinput-input = abap_true.
    APPEND ls_textinput TO lt_tmg_tech_details.
*   dialog data transport details
    PERFORM get_dom_value_text
      USING 'OBJIMP' ls_objh-importable
      CHANGING l_compare_flag.
*Table Documentation
    PERFORM get_docu
      USING
        'TB'
        <ls_ztadir>-obj_name
        'E'
      CHANGING
        lt_doc.
*Text table
    CLEAR ls_link.
    CALL FUNCTION 'TABLE_GET_TEXTTABLE'
      EXPORTING
        checktable = l_tabname
      IMPORTING
        tabname    = l_texttabname
      EXCEPTIONS
        OTHERS     = 1.
    IF sy-subrc = 0.
      l_text_obj_name = l_texttabname.
      SELECT SINGLE devclass FROM tadir INTO l_text_devclass
          WHERE pgmid = <ls_ztadir>-pgmid
          AND object = <ls_ztadir>-object
          AND obj_name = l_text_obj_name.
      IF l_text_devclass = g_pack.
        CONCATENATE l_texttabname '.' gc_extension_htm
            INTO ls_link-href.
        ls_link-onclick = 'window.location=this.href'.
      ENDIF.
      ls_link-descript = txt_text_table.
      ls_link-title = l_texttabname.
      APPEND ls_link TO lt_link.
    ENDIF.
*Content
    CLEAR ls_link.
    READ TABLE gt_tadir TRANSPORTING NO FIELDS
      WITH KEY obj_name = <ls_ztadir>-obj_name.
    IF sy-subrc = 0.
*  csv
      IF g_add_db_format_csv = abap_true.
        PERFORM data2csv
          USING l_tabname
          CHANGING lt_csv.
        PERFORM download
          USING
            lt_csv
            <ls_ztadir>-pgmid
            <ls_ztadir>-object
            <ls_ztadir>-obj_name
            gc_extension_csv
            abap_false.
        ls_link-href = <ls_ztadir>-obj_name.
        SPLIT ls_link-href AT '/' INTO TABLE lt_str.
        LOOP AT lt_str INTO ls_link-href.
        ENDLOOP.
        CONCATENATE ls_link-href '.' gc_extension_csv
          INTO ls_link-href.
        ls_link-onclick = 'window.open(this.href)'.
        ls_link-descript = gc_extension_csv.
        APPEND ls_link TO lt_link.
      ENDIF.
*  xml
      IF g_add_db_format_xml = abap_true.
        PERFORM data2xml
          USING l_tabname
          CHANGING lt_xml.
        PERFORM download
          USING
            lt_xml
            <ls_ztadir>-pgmid
            <ls_ztadir>-object
            <ls_ztadir>-obj_name
            gc_extension_xml
            abap_false.
        ls_link-href = <ls_ztadir>-obj_name.
        SPLIT ls_link-href AT '/' INTO TABLE lt_str.
        LOOP AT lt_str INTO ls_link-href.
        ENDLOOP.
        CONCATENATE ls_link-href '.' gc_extension_xml
          INTO ls_link-href.
        ls_link-onclick = 'window.open(this.href)'.
        ls_link-descript = gc_extension_xml.
        APPEND ls_link TO lt_link.
      ENDIF.
    ENDIF.
***
    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'DOC'.
          IF lt_doc IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'EXCLASS'.
          IF lt_exclass IS INITIAL.
            <ls_tabstrip>-hidden = abap_true.
          ENDIF.
      ENDCASE.
    ENDLOOP.
    CASE <ls_ztadir>-tabclass.
      WHEN 'CLUSTER'.
        l_name_value = txt_cluster_table.
      WHEN 'POOL'.
        l_name_value = txt_pooled_table.
      WHEN 'TRANSP'.
        l_name_value = txt_transp_table.
      WHEN OTHERS.
        l_name_value = txt_table.
    ENDCASE.
*HTML header
    PERFORM html_main_header
      USING
        tpt_ddic_tabl
        l_name_value
        <ls_ztadir>-obj_name
        txt_active___1
        txt_short_text___2
        <ls_ztadir>-descript
        space
        lt_tabstrip
        lt_link
      CHANGING
        lt_html.
*HTML technical settings
    PERFORM html_add_tech_settings
      USING
        txt_logical_storage_parameters
        lt_ts_params
        txt_buffering
        lt_ts_buffer
        txt_buffering_type
        lt_ts_buffer_type_l
        lt_ts_buffer_type_r
        lt_ts_bottom
        'TECH_SETTINGS'
        abap_false
      CHANGING
        lt_html.
*HTML enhancement category
    IF NOT lt_exclass IS INITIAL.
      PERFORM html_add_box_radiobuttons
        USING
          txt_enhancement_category_for_s
          'EXCLASS'
          lt_exclass
          'EXCLASS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*HTML table maintenance generator
    PERFORM html_add_tablemaintgenerator
      USING
        txt_technical_dialog_details
        lt_tmg_tech_details
        txt_maintenance_screens
        ls_tvdir-type
        ls_tvdir-liste
        ls_tvdir-detail
        txt_dialog_data_transport_deta
        ls_tvdir-flag
        l_compare_flag
        'TABLE_MAINT_GEN'
        abap_false
      CHANGING
        lt_html.
*HTML 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.
*HTML attributes
    PERFORM html_add_attributes_1
      USING
        ls_attributes
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
    PERFORM html_add_deliv_maint
      USING
        ls_deliv_maint
        lt_access
        'DELIVMAINT'
        abap_false
      CHANGING
        lt_html.
*HTML fields
    PERFORM html_add_table
      USING
        'TABL2FIELD'
        lt_dd03p
        lt_zdd03p_ext
        'FIELDS'
        abap_true
      CHANGING
        lt_html.
*HTML entry help check
    PERFORM html_add_table
      USING
        'TABL2ENTRY'
        lt_dd03p
        lt_zdd03p_ext
        'ENTRY_HELP_CHECK'
        abap_false
      CHANGING
        lt_html.
*HTML curr quant fields
    PERFORM html_add_table
      USING
        'TABL2CURRQ'
        lt_dd03p
        lt_zdd03p_ext
        'CURR_QUANT_FIELDS'
        abap_false
      CHANGING
        lt_html.
*HTML footer
    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_tabl_2


*-----------------------------------------------------------------------
* ddic_r3tr_tabl_get                             SAP-Tabellen
*-----------------------------------------------------------------------
FORM ddic_r3tr_tabl_get
  CHANGING
    cs_ztadir TYPE st_ztadir
    cs_dd02v TYPE dd02v
    ct_dd03p TYPE dd03ttyp
    ct_zdd03p_ext TYPE it_zdd03p_ext
    cs_dd09l TYPE dd09l.


  CLEAR:
  cs_dd02v,
  cs_dd09l.

  REFRESH:
  ct_dd03p,
  ct_zdd03p_ext.

  DATA:
  l_strukname TYPE strukname,
  ls_dd02v_n TYPE dd02v,
  lt_dd03p_n TYPE STANDARD TABLE OF dd03p,
  lt_dd05m TYPE STANDARD TABLE OF dd05m,
  lt_dd05m_n TYPE STANDARD TABLE OF dd05m,
  lt_dd08v TYPE STANDARD TABLE OF dd08v,
  lt_dd08v_n TYPE STANDARD TABLE OF dd08v,
  ls_dd09v_n TYPE dd09v,
  lt_dd12v TYPE STANDARD TABLE OF dd12v,
  lt_dd12v_n TYPE STANDARD TABLE OF dd12v,
  lt_dd17v TYPE STANDARD TABLE OF dd17v,
  lt_dd17v_n TYPE STANDARD TABLE OF dd17v,
  lt_dd35v TYPE STANDARD TABLE OF dd35v,
  lt_dd35v_n TYPE STANDARD TABLE OF dd35v,
  lt_dd36m TYPE STANDARD TABLE OF dd36m,
  lt_dd36m_n TYPE STANDARD TABLE OF dd36m,
  ls_zdd03p_ext TYPE st_zdd03p_ext,
  l_state TYPE dctablget.

  FIELD-SYMBOLS:
  <ls_dd03p> TYPE dd03p.


  l_strukname = cs_ztadir-obj_name.
  CALL FUNCTION 'DD_TABL_GET'
    EXPORTING
      tabl_name    = l_strukname
      withtext     = abap_true
      add_typeinfo = abap_true
    IMPORTING
      dd02v_wa_a   = cs_dd02v
      dd02v_wa_n   = ls_dd02v_n
      dd09l_wa_a   = cs_dd09l
      dd09l_wa_n   = ls_dd09v_n
      got_state    = l_state
    TABLES
      dd03p_tab_a  = ct_dd03p
      dd03p_tab_n  = lt_dd03p_n
      dd05m_tab_a  = lt_dd05m
      dd05m_tab_n  = lt_dd05m_n
      dd08v_tab_a  = lt_dd08v
      dd08v_tab_n  = lt_dd08v_n
      dd12v_tab_a  = lt_dd12v
      dd12v_tab_n  = lt_dd12v_n
      dd17v_tab_a  = lt_dd17v
      dd17v_tab_n  = lt_dd17v_n
      dd35v_tab_a  = lt_dd35v
      dd35v_tab_n  = lt_dd35v_n
      dd36m_tab_a  = lt_dd36m
      dd36m_tab_n  = lt_dd36m_n
    EXCEPTIONS
      OTHERS       = 1.
  IF sy-subrc <> 0.
    cs_ztadir-subrc = sy-subrc.
    RETURN.
  ENDIF.

  IF cs_dd02v-masterlang IS INITIAL.
    SELECT SINGLE masterlang FROM tadir INTO cs_dd02v-masterlang
        WHERE pgmid = 'R3TR'
        AND object = 'TABL'
        AND obj_name = l_strukname.
  ENDIF.

  LOOP AT ct_dd03p ASSIGNING <ls_dd03p>.
    IF <ls_dd03p>-fieldname = '.INCLU--AP'.
      <ls_dd03p>-fieldname = '.APPEND'.
    ENDIF.
    IF <ls_dd03p>-rollname IS INITIAL
    AND NOT <ls_dd03p>-precfield IS INITIAL.
      SELECT SINGLE tabname FROM dd02l INTO <ls_dd03p>-rollname
        WHERE tabname = <ls_dd03p>-precfield
        AND as4local = 'A'.
      IF sy-subrc = 0.
        <ls_dd03p>-datatype = 'STRU'.
      ELSE.
        SELECT SINGLE typename FROM dd40l INTO <ls_dd03p>-rollname
          WHERE typename = <ls_dd03p>-precfield
          AND as4local = 'A'.
        IF sy-subrc = 0.
          <ls_dd03p>-datatype = 'TTYP'.
        ENDIF.
      ENDIF.
    ENDIF.

    CLEAR ls_zdd03p_ext.
    CASE <ls_dd03p>-shlporigin.
      WHEN 'F'.
        ls_zdd03p_ext-shlporigin_f = abap_true.
      WHEN 'P'.
        ls_zdd03p_ext-shlporigin_p = abap_true.
    ENDCASE.
    IF NOT <ls_dd03p>-shlporigin IS INITIAL.
      PERFORM get_dom_value_text
        USING
          'SHLPORIGIN'
          <ls_dd03p>-shlporigin
        CHANGING
          ls_zdd03p_ext-shlporigin_ddtext.
    ENDIF.
    APPEND ls_zdd03p_ext TO ct_zdd03p_ext.
  ENDLOOP.
ENDFORM.                    "r3tr_tabl_get


*-----------------------------------------------------------------------
* ddic_r3tr_ttyp                                 Tabellentypen
*-----------------------------------------------------------------------
FORM ddic_r3tr_ttyp.

  DATA:
  lt_html TYPE it_string,
  lt_tabstrip TYPE it_tabstrip,
  l_typename TYPE typename,
  lt_dom_value_accessmode TYPE it_dom_value,
  lt_dom_value_keydef TYPE it_dom_value,
  lt_dom_value_keykind TYPE it_dom_value,
  ls_access TYPE st_access,
  ls_attributes TYPE st_attributes,
  ls_line_type TYPE st_line_type,
  ls_init_access TYPE st_init_access,
  ls_key TYPE st_key,
  lt_accessmode TYPE it_access,
  lt_keykind TYPE it_access,
  lt_keydef TYPE it_access,
  ls_dd40v TYPE dd40v,
  ls_dd40v_n TYPE dd40v,
  ls_dd42v TYPE dd42v,
  lt_dd42v TYPE STANDARD TABLE OF dd42v,
  lt_dd42v_n TYPE STANDARD TABLE OF dd42v,
  l_state TYPE dcttypget,
  l_ttypkind TYPE c.

  FIELD-SYMBOLS:
  <l_datatype> TYPE ANY,
  <l_dataleng> TYPE ANY,
  <l_decimals> TYPE ANY,
  <l_reftype> TYPE ANY,
  <l_rowkind> TYPE ANY,
  <l_rowtype> TYPE ANY,
  <l_occurs> TYPE ANY,
  <l_range_ctyp> TYPE ANY,
  <l_ttypkind> TYPE ANY,
  <ls_ztadir> TYPE st_ztadir,
  <ls_dom_value> TYPE st_dom_value.

  PERFORM get_tabstrip
    USING 'DDIC_R3TR_TTYP' space
    CHANGING lt_tabstrip.

  PERFORM get_dom_value_texts
    USING
      'ACCESSMODE'
    CHANGING
      lt_dom_value_accessmode.
  PERFORM get_dom_value_texts
    USING
      'TTYPKEYDEF'
    CHANGING
      lt_dom_value_keydef.
  PERFORM get_dom_value_texts
    USING
      'KEYKIND'
    CHANGING
      lt_dom_value_keykind.


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

    CLEAR:
    ls_attributes,
    ls_line_type,
    ls_init_access,
    ls_key,
    l_ttypkind.

    REFRESH:
    lt_html,
    lt_dd42v,
    lt_dd42v_n.

    l_typename = <ls_ztadir>-obj_name.
    CALL FUNCTION 'DD_TTYP_GET'
      EXPORTING
        ttyp_name   = l_typename
        langu       = sy-langu
        withtext    = abap_true
      IMPORTING
        got_state   = l_state
        dd40v_wa_a  = ls_dd40v
        dd40v_wa_n  = ls_dd40v_n
      TABLES
        dd42v_tab_a = lt_dd42v
        dd42v_tab_n = lt_dd42v_n
      EXCEPTIONS
        OTHERS      = 1.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.
    ASSIGN COMPONENT 'TTYPKIND' OF STRUCTURE ls_dd40v TO <l_ttypkind>.
    IF <l_ttypkind> IS ASSIGNED.
      l_ttypkind = <l_ttypkind>.
      UNASSIGN <l_ttypkind>.
    ENDIF.
*attributes
    ls_attributes-bname = ls_dd40v-as4user.
    PERFORM get_date
      USING
        ls_dd40v-as4date
      CHANGING
        ls_attributes-date_last_changed.
    ls_attributes-devclass = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        ls_attributes-devclass_descr.
    IF ls_dd40v-ddlanguage IS INITIAL.
      SELECT SINGLE masterlang FROM tadir INTO ls_dd40v-ddlanguage
          WHERE pgmid = 'R3TR'
          AND object = 'TTYP'
          AND obj_name = l_typename.
    ENDIF.
    PERFORM get_spras
      USING
        ls_dd40v-ddlanguage
      CHANGING
        ls_attributes-laiso
        ls_attributes-sptxt.
    PERFORM get_user
      USING
        ls_dd40v-as4user
      CHANGING
        ls_attributes-name_text.
*linetype
    ls_line_type-rowkind = ls_dd40v-rowkind.
    ASSIGN COMPONENT 'ROWKIND' OF STRUCTURE ls_dd40v TO <l_rowkind>.
    IF <l_rowkind> IS ASSIGNED.
      ls_line_type-rowkind = <l_rowkind>.
      UNASSIGN <l_rowkind>.
    ENDIF.
    ASSIGN COMPONENT 'ROWTYPE' OF STRUCTURE ls_dd40v TO <l_rowtype>.
    IF <l_rowtype> IS ASSIGNED.
      ls_line_type-rowtype = <l_rowtype>.
      UNASSIGN <l_rowtype>.
    ENDIF.
    PERFORM get_dom_value_text
      USING
        'TYPEKIND'
        ls_dd40v-rowtype
      CHANGING
        ls_line_type-rowdescr.
    ASSIGN COMPONENT 'DATATYPE' OF STRUCTURE ls_dd40v TO <l_datatype>.
    IF <l_datatype> IS ASSIGNED.
      ls_line_type-datatype = <l_datatype>.
      UNASSIGN <l_datatype>.
    ENDIF.
    ASSIGN COMPONENT 'LENG' OF STRUCTURE ls_dd40v TO <l_dataleng>.
    IF <l_dataleng> IS ASSIGNED.
      ls_line_type-dataleng = <l_dataleng>.
      UNASSIGN <l_dataleng>.
    ENDIF.
    ASSIGN COMPONENT 'DECIMALS' OF STRUCTURE ls_dd40v TO <l_decimals>.
    IF <l_decimals> IS ASSIGNED.
      ls_line_type-datadeci = <l_decimals>.
      UNASSIGN <l_decimals>.
    ENDIF.
    ls_line_type-datadeci = ls_dd40v-decimals.
    ASSIGN COMPONENT 'REFTYPE' OF STRUCTURE ls_dd40v TO <l_reftype>.
    IF <l_reftype> IS ASSIGNED.
      ls_line_type-reftype = <l_reftype>.
      PERFORM get_dom_value_text
        USING
          'DDREFTYPE'
          <l_reftype>
        CHANGING
          ls_line_type-refdescr.
      UNASSIGN <l_reftype>.
    ELSE.
      ls_line_type-reftype = '#'.  " R/3 4.6 does not know ref type
    ENDIF.
    ASSIGN COMPONENT 'RANGE_CTYP' OF STRUCTURE ls_dd40v
      TO <l_range_ctyp>.
    IF <l_range_ctyp> IS ASSIGNED.
      ls_line_type-range_ctyp = <l_range_ctyp>.
      UNASSIGN <l_range_ctyp>.
    ENDIF.
    ASSIGN COMPONENT 'CTDATATYPE' OF STRUCTURE ls_dd40v
      TO <l_datatype>.
    IF <l_datatype> IS ASSIGNED.
      ls_line_type-ctdatatype = <l_datatype>.
      UNASSIGN <l_datatype>.
    ENDIF.
    ASSIGN COMPONENT 'CTLENG' OF STRUCTURE ls_dd40v TO <l_dataleng>.
    IF <l_dataleng> IS ASSIGNED.
      ls_line_type-ctleng = <l_dataleng>.
      UNASSIGN <l_dataleng>.
    ENDIF.
    ASSIGN COMPONENT 'CTDECIMALS' OF STRUCTURE ls_dd40v
      TO <l_decimals>.
    IF <l_decimals> IS ASSIGNED.
      ls_line_type-ctdecimals = <l_decimals>.
      UNASSIGN <l_decimals>.
    ENDIF.
*initaccess
    ASSIGN COMPONENT 'OCCURS' OF STRUCTURE ls_dd40v TO <l_occurs>.
    IF <l_occurs> IS ASSIGNED.
      ls_init_access-occurs = <l_occurs>.
      UNASSIGN <l_occurs>.
    ELSE.
      ls_init_access-unknown = abap_true.
    ENDIF.

    REFRESH lt_accessmode.
    LOOP AT lt_dom_value_accessmode ASSIGNING <ls_dom_value>.
      CLEAR ls_access.
      ls_access-ddtext = <ls_dom_value>-text.
      IF ls_dd40v-accessmode = <ls_dom_value>-value.
        ls_access-checked = abap_true.
      ENDIF.
      APPEND ls_access TO lt_accessmode.
    ENDLOOP.
*key
    REFRESH lt_keydef.
    LOOP AT lt_dom_value_keydef ASSIGNING <ls_dom_value>.
      CLEAR ls_access.
      ls_access-ddtext = <ls_dom_value>-text.
      IF ls_dd40v-keydef = <ls_dom_value>-value.
        ls_access-checked = abap_true.
      ENDIF.
      APPEND ls_access TO lt_keydef.
    ENDLOOP.

    REFRESH lt_keykind.
    LOOP AT lt_dom_value_keykind ASSIGNING <ls_dom_value>.
      CLEAR ls_access.
      ls_access-ddtext = <ls_dom_value>-text.
      IF ls_dd40v-keykind = <ls_dom_value>-value.
        ls_access-checked = abap_true.
      ENDIF.
      APPEND ls_access TO lt_keykind.
    ENDLOOP.
***
    IF ls_dd40v-generic = abap_true.
      ls_line_type-info = txt_type_is_generic.
      ls_init_access-info1 = txt_type_is_generic.
      ls_key-info = txt_type_is_generic.
    ENDIF.
    IF l_ttypkind = 'R'.
      ls_init_access-info2 = txt_access_type_is_given_for_a.
      CONCATENATE
        txt_key_attribute_defined_for1
        txt_key_attribute_defined_for2
        INTO ls_key-info SEPARATED BY space.
    ENDIF.

**************
    PERFORM html_main_header
      USING
        tpt_ddic_ttyp
        txt_table_type
        <ls_ztadir>-obj_name
        txt_active___1
        txt_short_text___2
        <ls_ztadir>-descript
        space
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*HTML attributes
    PERFORM html_add_attributes_1
      USING
        ls_attributes
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
*HTML line type
    IF l_ttypkind = 'R'.
      PERFORM html_add_line_type_2
        USING
          ls_line_type
          'LINETYPE'
          abap_true
        CHANGING
          lt_html.
    ELSE.
      PERFORM html_add_line_type_1
        USING
          ls_line_type
          'LINETYPE'
          abap_true
        CHANGING
          lt_html.
    ENDIF.
*HTML init access
    PERFORM html_add_init_access
      USING
        ls_init_access
        lt_accessmode
        'INITACCESS'
        abap_false
      CHANGING
        lt_html.
*HTML key
    PERFORM html_add_key
      USING
        ls_key
        lt_keydef
        lt_keykind
        'TTYP_DD42V'
        lt_dd42v
        'KEY'
        abap_false
      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_ttyp


*-----------------------------------------------------------------------
* ddic_r3tr_type                                 Suchhilfen
*-----------------------------------------------------------------------
FORM ddic_r3tr_type.

  DATA:
  lt_html TYPE it_string,
  l_progname TYPE progname,
  ls_trdir TYPE trdir,
  lt_source TYPE it_string,
  ls_attributes TYPE st_attributes,
  lt_tabstrip TYPE it_tabstrip.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

  PERFORM get_tabstrip
    USING 'DDIC_R3TR_TYPE' space
    CHANGING lt_tabstrip.

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

    CLEAR:
    ls_attributes.

    REFRESH:
    lt_html.

    CALL FUNCTION 'RS_TADIR_TO_PROGNAME'
      EXPORTING
        object   = 'TYPE'
        obj_name = <ls_ztadir>-obj_name
      IMPORTING
        progname = l_progname.
    SELECT SINGLE * FROM trdir
        INTO ls_trdir
        WHERE name = l_progname.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.
    ls_attributes-bname = ls_trdir-unam.
    PERFORM get_date
      USING
        ls_trdir-udat
      CHANGING
        ls_attributes-date_last_changed.
    ls_attributes-devclass = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        ls_attributes-devclass_descr.
    IF ls_trdir-rload IS INITIAL.
      SELECT SINGLE masterlang FROM tadir INTO ls_trdir-rload
          WHERE pgmid = 'R3TR'
          AND object = 'TYPE'
          AND obj_name = <ls_ztadir>-obj_name.
    ENDIF.
    PERFORM get_spras
      USING
        ls_trdir-rload
      CHANGING
        ls_attributes-laiso
        ls_attributes-sptxt.
    PERFORM get_user
      USING
        ls_trdir-unam
      CHANGING
        ls_attributes-name_text.
    PERFORM try_read_report
      USING l_progname
      CHANGING lt_source.
*HTML
    PERFORM html_main_header
      USING
        tpt_ddic_type
        txt_type_group
        <ls_ztadir>-obj_name
        txt_active___1
        txt_short_text___2
        <ls_ztadir>-descript
        'makeDivSize(''SOURCECODE'')'
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
    PERFORM html_add_attributes_1
      USING
        ls_attributes
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
    PERFORM html_add_sourcecode
      USING
        lt_source
        <ls_ztadir>-obj_name
        space
        space
        gc_extension_txt
        '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.
    IF g_add_sourcecode = abap_true.
      PERFORM download
        USING
          lt_source
          <ls_ztadir>-pgmid
          <ls_ztadir>-object
          <ls_ztadir>-obj_name
          gc_extension_txt
          abap_false.
    ENDIF.
  ENDLOOP.
ENDFORM.                                                    "r3tr_type


*-----------------------------------------------------------------------
* ddic_r3tr_view                                 Aggregat-Header
*                               (Views, Matchcode-Objekte, Sperrobjekte)
*-----------------------------------------------------------------------
FORM ddic_r3tr_view.

  DATA:
  lt_html TYPE it_string,
  lt_tabstrip TYPE it_tabstrip,
  l_viewname TYPE viewname,
  ls_attributes TYPE st_attributes,
  ls_tabname TYPE st_tabname,
  lt_tabname TYPE it_tabname,
  ls_join_conditions TYPE st_join_conditions,
  lt_join_conditions TYPE it_join_conditions,
  lt_tables TYPE it_tables,
  ls_table TYPE st_table_structure,
  ls_deliv_maint TYPE st_deliv_maint,
  lt_dom_value_viewgrant TYPE it_dom_value,
  lt_access TYPE it_access,
  ls_access TYPE st_access,
  ls_dd09v TYPE dd09v,
  ls_dd09v_n TYPE dd09v,
  ls_dd25v TYPE dd25v,
  ls_dd25v_n TYPE dd25v,
  lt_dd26v TYPE STANDARD TABLE OF dd26v,
  lt_dd26v_n TYPE STANDARD TABLE OF dd26v,
  lt_dd27p TYPE STANDARD TABLE OF dd27p,
  lt_dd27p_n TYPE STANDARD TABLE OF dd27p,
  lt_dd28v TYPE STANDARD TABLE OF dd28v,
  lt_dd28v_n TYPE STANDARD TABLE OF dd28v,
  l_state TYPE dcviewget,
  l_id TYPE string,
  l_txt_viewclass TYPE as4text,
  lt_ts_buffer TYPE it_access,
  lt_ts_buffer_type_l TYPE it_textinput,
  lt_ts_buffer_type_r TYPE it_textinput,
  ls_textinput TYPE st_textinput,
  l_ddtext TYPE ddtext,
  lt_dom_value TYPE it_dom_value,
  lt_create TYPE it_string,
  l_filename TYPE string.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_dom_value> TYPE st_dom_value,
  <ls_dd26v> TYPE dd26v,
  <ls_dd27p> TYPE dd27p,
  <ls_dd28v> TYPE dd28v,
  <ls_tabstrip> TYPE st_tabstrip.

  PERFORM get_dom_value_texts
    USING
      'VIEWGRANT'
    CHANGING
      lt_dom_value_viewgrant.

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

    CLEAR:
    ls_attributes,
    l_txt_viewclass,
    ls_textinput,
    l_ddtext,
    l_filename.

    REFRESH:
    lt_html,
    lt_dd26v,
    lt_dd26v_n,
    lt_dd27p,
    lt_dd27p_n,
    lt_dd28v,
    lt_dd28v_n,
    lt_ts_buffer,
    lt_ts_buffer_type_l,
    lt_ts_buffer_type_r,
    lt_create.

    l_viewname = <ls_ztadir>-obj_name.
    CALL FUNCTION 'DD_VIEW_GET'
      EXPORTING
        view_name   = l_viewname
        langu       = sy-langu
        withtext    = abap_true
      IMPORTING
        dd25v_wa_a  = ls_dd25v
        dd25v_wa_n  = ls_dd25v_n
        dd09l_wa_a  = ls_dd09v
        dd09l_wa_n  = ls_dd09v_n
        got_state   = l_state
      TABLES
        dd26v_tab_a = lt_dd26v
        dd26v_tab_n = lt_dd26v_n
        dd27p_tab_a = lt_dd27p
        dd27p_tab_n = lt_dd27p_n
        dd28v_tab_a = lt_dd28v
        dd28v_tab_n = lt_dd28v_n
      EXCEPTIONS
        OTHERS      = 1.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.
*attributes
    ls_attributes-bname = ls_dd25v-as4user.
    PERFORM get_date
      USING
        ls_dd25v-as4date
      CHANGING
        ls_attributes-date_last_changed.
    ls_attributes-devclass = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        ls_attributes-devclass_descr.
    IF ls_dd25v-masterlang IS INITIAL.
      SELECT SINGLE masterlang FROM tadir INTO ls_dd25v-masterlang
          WHERE pgmid = 'R3TR'
          AND object = 'VIEW'
          AND obj_name = l_viewname.
    ENDIF.
    PERFORM get_spras
      USING
        ls_dd25v-masterlang
      CHANGING
        ls_attributes-laiso
        ls_attributes-sptxt.
    PERFORM get_user
      USING
        ls_dd25v-as4user
      CHANGING
        ls_attributes-name_text.
    IF ls_dd25v-viewclass CO 'A'.
      ls_attributes-display_appview = abap_true.
      ls_attributes-appview = ls_dd25v-roottab.
    ENDIF.
*technical settings
    IF NOT ls_dd09v-tabname IS INITIAL.
*     buffering
      PERFORM get_dom_value_texts
        USING 'BUFALLOW'
        CHANGING lt_dom_value.
      LOOP AT lt_dom_value ASSIGNING <ls_dom_value>.
        CLEAR ls_access.
        ls_access-ddtext = <ls_dom_value>-text.
        IF <ls_dom_value>-value = ls_dd09v-bufallow.
          ls_access-checked = abap_true.
        ENDIF.
        APPEND ls_access TO lt_ts_buffer.
      ENDLOOP.
*     buffering type
      CLEAR ls_textinput.
      ls_textinput-name = txt_single_records_buff.
      IF ls_dd09v-pufferung = 'P'.
        ls_textinput-value = abap_true.
      ENDIF.
      ls_textinput-flag = abap_true.
      APPEND ls_textinput TO lt_ts_buffer_type_l.
      CLEAR ls_textinput.
      ls_textinput-name = txt_generic_area_buffered.
      IF ls_dd09v-pufferung = 'G'.
        ls_textinput-value = abap_true.
      ENDIF.
      ls_textinput-flag = abap_true.
      APPEND ls_textinput TO lt_ts_buffer_type_l.
      CLEAR ls_textinput.
      ls_textinput-name = txt_fully_buffered.
      IF ls_dd09v-pufferung = 'X'.
        ls_textinput-value = abap_true.
      ENDIF.
      ls_textinput-flag = abap_true.
      APPEND ls_textinput TO lt_ts_buffer_type_l.
      CLEAR ls_textinput.
      ls_textinput-space = abap_true.
      APPEND ls_textinput TO lt_ts_buffer_type_r.
      CLEAR ls_textinput.
      ls_textinput-name = txt_no_of_key_fields.
      PERFORM get_unpacked
        USING ls_dd09v-schfeldanz
        CHANGING ls_textinput-value.
      ls_textinput-input = abap_true.
      APPEND ls_textinput TO lt_ts_buffer_type_r.
      CLEAR ls_textinput.
      ls_textinput-space = abap_true.
      APPEND ls_textinput TO lt_ts_buffer_type_r.
    ENDIF.
*CREATE Statement
    CALL FUNCTION 'DB_GET_VIEW_DEFINITION_RAW'
      EXPORTING
        viewname = l_viewname
      TABLES
        text_tab = lt_create
      EXCEPTIONS
        OTHERS   = 1.
*tables for joining
    REFRESH lt_tabname.
*  data
    LOOP AT lt_dd26v ASSIGNING <ls_dd26v>.
      ls_tabname-tabname = <ls_dd26v>-tabname.
      APPEND ls_tabname TO lt_tabname.
    ENDLOOP.
    SORT lt_tabname BY tabname.
    DELETE ADJACENT DUPLICATES FROM lt_tabname.

*join conditions - data
    REFRESH lt_join_conditions.
    IF ls_dd25v-viewclass CO 'HDCV'.
*  data
      REFRESH lt_join_conditions.
      SORT lt_dd28v BY position.
      LOOP AT lt_dd28v ASSIGNING <ls_dd28v>.
        IF <ls_dd28v>-negation = 'JL'.
          ls_join_conditions-tabname_l = <ls_dd28v>-tabname.
          ls_join_conditions-fieldname_l = <ls_dd28v>-fieldname.
          PERFORM get_gui_operator
            USING
              <ls_dd28v>-operator
            CHANGING
              ls_join_conditions-operator.
        ELSE.
          ls_join_conditions-tabname_r = <ls_dd28v>-tabname.
          ls_join_conditions-fieldname_r = <ls_dd28v>-fieldname.
          APPEND ls_join_conditions TO lt_join_conditions.
        ENDIF.
      ENDLOOP.
    ENDIF.

*selection condition
    IF ls_dd25v-viewclass CO 'HDCV'.
      DELETE lt_dd28v WHERE constants = space.
    ENDIF.
*maint status - access
    REFRESH lt_access.
    LOOP AT lt_dom_value_viewgrant ASSIGNING <ls_dom_value>.
      CLEAR ls_access.
      IF ls_dd25v-viewclass CO 'HCV'
      OR <ls_dom_value>-value NA 'MU'.
        ls_access-ddtext = <ls_dom_value>-text.
        IF ls_dd25v-viewgrant = <ls_dom_value>-value.
          ls_access-checked = abap_true.
        ENDIF.
        APPEND ls_access TO lt_access.
      ENDIF.
    ENDLOOP.
*maint status - others
    CLEAR ls_deliv_maint.
    ls_deliv_maint-display_cont = abap_false.
    ls_deliv_maint-display_main = abap_false.
    IF ls_dd25v-viewclass CO 'CV'.
      ls_deliv_maint-display_cont = abap_true.
      ls_deliv_maint-contflag = ls_dd25v-customauth.
      PERFORM get_dom_value_text
        USING
          'CONTFLAG'
          ls_dd25v-customauth
        CHANGING
          ls_deliv_maint-contflag_text.
    ENDIF.
    IF ls_dd25v-viewclass CO 'DPCV'.
      ls_deliv_maint-display_main = abap_true.
      PERFORM get_dom_value_text
        USING
          'MAINTFLAG'
          ls_dd25v-globalflag
        CHANGING
          ls_deliv_maint-mainflag_text.
    ENDIF.
***Tabstrip
    PERFORM get_tabstrip
      USING 'DDIC_R3TR_VIEW' ls_dd25v-viewclass
      CHANGING lt_tabstrip.
    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'CREATE'.
          IF lt_create IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'SELECTIONCONDITIONS'.
          IF lt_dd28v IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
      ENDCASE.
    ENDLOOP.

*HTML header
    PERFORM get_dom_value_text
      USING
        'VIEWCLASS'
        ls_dd25v-viewclass
      CHANGING
        l_txt_viewclass.
    PERFORM html_main_header
      USING
        tpt_ddic_view
        l_txt_viewclass
        <ls_ztadir>-obj_name
        txt_active___1
        txt_short_text___2
        <ls_ztadir>-descript
        space
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*HTML technical settings
    IF ls_dd25v-viewclass CO 'HDPSCV'.
      PERFORM html_add_box1rb_subbox2ti
        USING
          txt_buffering
          lt_ts_buffer
          txt_buffering_type
          lt_ts_buffer_type_l
          lt_ts_buffer_type_r
          'TECH_SETTINGS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*HTML CREATE Statement
    IF ls_dd25v-viewclass CO 'HDPSCV'.
      IF NOT lt_create IS INITIAL
      OR g_empty_tab = gc_empty_tab_display.
        CONCATENATE l_viewname '_CREATE' INTO l_filename.
        PERFORM html_add_sourcecode
          USING
            lt_create
            l_filename
            space
            space
            gc_extension_txt
            'CREATE'
            abap_false
          CHANGING
            lt_html.
        IF NOT lt_create IS INITIAL
        AND g_add_sourcecode = abap_true.
          PERFORM download
            USING
              lt_create
              <ls_ztadir>-pgmid
              <ls_ztadir>-object
              l_filename
              gc_extension_txt
              abap_false.
        ENDIF.
      ENDIF.
    ENDIF.
*HTML attributes
    PERFORM html_add_attributes_1
      USING
        ls_attributes
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
*HTML table/join conditions
    IF ls_dd25v-viewclass CO 'HDCV'.
      PERFORM html_add_table2hor
        USING
          'VIEW_JOINT'
          lt_tabname
          lt_tabname
          'VIEW_JOINC'
          lt_join_conditions
          lt_join_conditions
          'TABJOINCONDITIONS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*HTML view fields
    PERFORM get_id
      USING 'VIEW_FIELD|' ls_dd25v-viewclass
      CHANGING l_id.
    IF ls_dd25v-viewclass CO 'HDPCV'.
      PERFORM html_add_table
        USING
          l_id
          lt_dd27p
          lt_dd27p
          'VIEWFIELDS'
          abap_true
        CHANGING
          lt_html.
    ELSEIF ls_dd25v-viewclass CO 'AS'.
      PERFORM html_add_table2hor
        USING
          'VIEW_JOINT'
          lt_tabname
          lt_tabname
          l_id
          lt_dd27p
          lt_dd27p
          'VIEWFIELDS'
          abap_true
        CHANGING
          lt_html.
    ENDIF.
*HTML selection conditions
    IF ls_dd25v-viewclass CO 'HDCV'.
      IF NOT lt_dd28v IS INITIAL
      OR g_empty_tab = gc_empty_tab_display.
        PERFORM html_add_table
          USING
            'VIEW_SELEC'
            lt_dd28v
            lt_dd28v
            'SELECTIONCONDITIONS'
            abap_false
          CHANGING
            lt_html.
      ENDIF.
    ENDIF.
*HTML maint status
    IF ls_dd25v-viewclass CO 'HDCV'.
      PERFORM html_add_deliv_maint
        USING
          ls_deliv_maint
          lt_access
          'DELIVMAINT'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*HTML footer
    PERFORM html_main_footer
      USING
        lt_html.
*download
    PERFORM download
      USING
        lt_html
        <ls_ztadir>-pgmid
        <ls_ztadir>-object
        <ls_ztadir>-obj_name
        gc_extension_htm
        abap_true.
  ENDLOOP.
ENDFORM.                                                    "r3tr_view
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_FUGR                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* fugr
*-----------------------------------------------------------------------
FORM fugr.
*FUGR
  PERFORM fugr_r3tr_fugr.
*INCL
  PERFORM fugr_r3tr_includes.
*MOD
  PERFORM fugr_r3tr_modules.
*Screen
  PERFORM fugr_r3tr_screen.

ENDFORM.                    "fugr


*-----------------------------------------------------------------------
* fugr_get_feldtab
*-----------------------------------------------------------------------
FORM fugr_get_feldtab
  USING
    is_d020s TYPE d020s
    it_d021s TYPE it_d021s
    it_d023x TYPE d023s_xtab
    is_dynpro_release TYPE st_dynpro_release
  CHANGING
    ct_feld TYPE it_feld
    ct_feld_redef TYPE it_feld_redef.

  DATA:
  ls_d021s_res1 LIKE d021s_res1,
  ls_feld TYPE feld,
  ls_feld_redef TYPE st_feld_redef,
  ls_func_old TYPE st_dynpro_function_old,
  ls_func_new TYPE st_dynpro_function_new,
  l_length TYPE i,
  l_strlen TYPE i.

  FIELD-SYMBOLS:
  <ls_d021s> TYPE d021s,
  <ls_d023x> TYPE d023s_xh,
  <l_recentry> TYPE ANY.

  CONSTANTS:
  lc_flg1ddf TYPE x VALUE '20',
  lc_flg1ddm TYPE x VALUE '10',
  lc_flg1edt TYPE x VALUE '80',
  lc_flg1scr TYPE x VALUE '01',
  lc_flg3obl TYPE x VALUE '20',
  lc_fmb1ges TYPE x VALUE '20',
  lc_fmb1out TYPE x VALUE '01',
  lcs_dynpro_rel_400 TYPE st_dynpro_release VALUE '4.00',
  lcs_dynpro_rel_401 TYPE st_dynpro_release VALUE '4.01',
  lcs_dynpro_rel_402 TYPE st_dynpro_release VALUE '4.02',
  lcs_dynpro_rel_46a TYPE st_dynpro_release VALUE '4.60',
  lcs_dynpro_rel_610 TYPE st_dynpro_release VALUE '6.10'.


  REFRESH:
  ct_feld,
  ct_feld_redef.


  LOOP AT it_d021s ASSIGNING <ls_d021s>.
    CLEAR ls_d021s_res1.
    CLEAR ls_feld.
    CLEAR ls_feld_redef.
    CLEAR ls_func_new.
    CLEAR ls_func_old.

    ls_d021s_res1 = <ls_d021s>-res1.

    ls_feld-name = <ls_d021s>-fnam.
    ls_feld-dynnr = is_d020s-dnum.
    ls_feld-line = <ls_d021s>-line.

    IF ( <ls_d021s>-lanf <> 0 AND <ls_d021s>-ltyp = 'T' )
    OR ( <ls_d021s>-ltyp = 'I' AND <ls_d021s>-fill = 'P' )
    OR <ls_d021s>-ltyp = 'S'.
      ls_feld-coln = <ls_d021s>-coln.
    ELSE.
      ls_feld-coln = <ls_d021s>-coln - 1.
    ENDIF.

    ls_feld-leng = <ls_d021s>-leng.

    ls_feld-vleng = 1.
    IF <ls_d021s>-didx <= 0.
      IF <ls_d021s>-stxt(1) = '@'.
        IF <ls_d021s>-leng > 2.
          ls_feld-vleng = <ls_d021s>-leng - 2.
        ENDIF.
      ELSE.
        IF <ls_d021s>-leng > 1.
          ls_feld-vleng = <ls_d021s>-leng.
        ENDIF.
      ENDIF.
    ELSE.
      IF <ls_d021s>-fill CA 'TBSUIR'.
        ls_feld-vleng = <ls_d021s>-leng.
      ELSE.
        IF <ls_d021s>-flg1 Z lc_flg1edt.
          IF <ls_d021s>-ltyp CA 'TP'.
            ls_feld-vleng = <ls_d021s>-didx.
          ELSE.
            IF <ls_d021s>-didx > 0.
              ls_feld-vleng = <ls_d021s>-didx.
            ELSE.
              ls_feld-vleng = <ls_d021s>-leng.
            ENDIF.
          ENDIF.
        ELSE.
          ls_feld-vleng = <ls_d021s>-didx.
        ENDIF.
      ENDIF.
    ENDIF.

    ls_feld-high = 1.
    IF <ls_d021s>-didx > 0
    AND <ls_d021s>-fill CA 'TBSUIR'.
      ls_feld-high = <ls_d021s>-didx.
    ENDIF.

    IF <ls_d021s>-flg1 O lc_flg1edt
    AND <ls_d021s>-flg1 O lc_flg1scr
    AND <ls_d021s>-fill NA 'TSI'.
      ls_feld-scroll = abap_true.
    ELSE.
      ls_feld-scroll = abap_false.
    ENDIF.
    IF <ls_d021s>-type = 'STRG'
    OR <ls_d021s>-type = 'RSTR'
    OR <ls_d021s>-type = 'SSTR'.
      ls_feld-scroll = abap_true.
    ENDIF.

    IF <ls_d021s>-flg1 O lc_flg1ddf.
      ls_feld-dict = abap_true.
    ELSE.
      ls_feld-dict = abap_false.
    ENDIF.

    IF <ls_d021s>-flg1 O lc_flg1edt.
      IF <ls_d021s>-flg1 O lc_flg1ddf
      AND <ls_d021s>-flg1 O lc_flg1ddm.
        ls_feld-dmod = abap_true.
      ENDIF.
    ELSE.
      IF <ls_d021s>-flg1 O lc_flg1ddf.
        IF <ls_d021s>-ityp = '4'.
          ls_feld-dmod = '4'.
        ELSE.
          IF <ls_d021s>-ityp = '1'
          OR <ls_d021s>-ityp = '2'
          OR <ls_d021s>-ityp = '3'.
            IF <ls_d021s>-flg1 O lc_flg1ddm.
              ls_feld-dmod = <ls_d021s>-ityp.
            ELSE.
              ls_feld-dmod = 'V'.
            ENDIF.
          ELSEIF <ls_d021s>-ityp = '0'.
            IF <ls_d021s>-flg1 O lc_flg1ddm.
              ls_feld-dmod = 'F'.
            ELSE.
              ls_feld-dmod = 'V'.
            ENDIF.
          ELSE.
            ls_feld-dmod = 'F'.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.

    ls_feld-grp1 = <ls_d021s>-grp1.
    ls_feld-grp2 = <ls_d021s>-grp2.
    ls_feld-grp3 = <ls_d021s>-grp3.
    ls_feld-grp4 = <ls_d021s>-grp4.

    IF <ls_d021s>-ltyp = 'L'.
      ls_feld-loop = <ls_d021s>-lrep.
      IF is_d020s-valp = <ls_d021s>-lanf.
        ls_feld-ltyp = 'Var'.
      ELSE.
        ls_feld-ltyp = 'Fix'.
      ENDIF.
    ENDIF.

    IF <ls_d021s>-fmb1 O lc_fmb1ges.
      ls_feld-fobl = 'N'.
    ELSEIF <ls_d021s>-flg3 O lc_flg3obl.
      ls_feld-fobl = 'O'.
      ls_feld-fein = abap_true.
    ELSE.
      ls_feld-fein = abap_true.
      ASSIGN COMPONENT 'RECENTRY' OF STRUCTURE ls_d021s_res1
        TO <l_recentry>.
      IF <l_recentry> IS ASSIGNED AND NOT <l_recentry> IS INITIAL.
        ls_feld-fobl = 'R'.
      ENDIF.
      UNASSIGN <l_recentry>.
    ENDIF.
    PERFORM get_dom_value_text
      USING 'SCRPFOBL' ls_feld-fobl
      CHANGING ls_feld_redef-fobl.

    IF <ls_d021s>-fill <> 'R'.
      ls_feld-fout = abap_true.
    ENDIF.

    PERFORM fugr_get_feld_fill_na_btisu
      USING <ls_d021s> is_dynpro_release
      CHANGING ls_feld.

    ls_feld-colr = <ls_d021s>-colr.
    ls_feld-mtch = <ls_d021s>-dmac.
    ls_feld-waer = <ls_d021s>-wnam.

    IF is_dynpro_release <= lcs_dynpro_rel_400.
      ls_func_old = <ls_d021s>-dmac.
      ls_feld-fcod  = ls_func_old-code.
      ls_feld-ptype = ls_func_old-type.
    ELSEIF is_dynpro_release <= lcs_dynpro_rel_402.
      ls_func_new  = <ls_d021s>-dmac.
      ls_feld-fcod  = ls_func_new-code.
      ls_feld-ptype = ls_func_new-type.
    ELSE.
      ls_feld-fcod  = ls_d021s_res1-funccode.
      ls_feld-ptype = ls_d021s_res1-functype.
    ENDIF.

    IF ls_d021s_res1-ctmenuflg = abap_true.
      ls_feld-ctmenust = abap_true.
      ls_feld-ctmenuprog = ls_d021s_res1-ctmenuprog.
      ls_feld-ctmenustat = ls_d021s_res1-ctmenustat.
    ELSE.
      ls_feld-ctmenudy = abap_true.
      ls_feld-ctmenuonct = ls_d021s_res1-ctmenustat.
    ENDIF.

    READ TABLE it_d023x ASSIGNING <ls_d023x>
        WITH KEY cccustom = <ls_d021s>-fnam.
    IF sy-subrc = 0.
      ls_feld-ccname = <ls_d023x>-ccname.
    ENDIF.

    CALL FUNCTION 'RS_SCRP_GET_FIELD_TYPE_TEXT'
      EXPORTING
        field                    = <ls_d021s>
        text_kind                = 'SHORT'
      IMPORTING
        field_type_without_modif = ls_feld-gtyp
      EXCEPTIONS
        OTHERS                   = 1.

    ls_feld-stxt = <ls_d021s>-stxt.
    ls_feld-dropfrom = ls_d021s_res1-dropval.
    IF ls_d021s_res1-dropdown = 'D'.
      CASE ls_d021s_res1-dropstyle.
        WHEN 'K'.
          ls_feld-dropdown = ls_d021s_res1-dropstyle.
        WHEN OTHERS.
          ls_feld-dropdown = ls_d021s_res1-droptyp.
      ENDCASE.
      PERFORM get_dom_value_text
          USING 'SCRPCOTYPE' ls_feld-dropdown
          CHANGING ls_feld_redef-dropdown.
    ENDIF.

    IF <ls_d021s>-colr = '8'.
      ls_feld-extend = 'N'.
    ELSEIF <ls_d021s>-colr = '7'.
      ls_feld-extend = 'C'.
    ENDIF.

    IF <ls_d021s>-fill CA 'BTSUI'.
      ls_feld-hierarchy = '+ '.
    ENDIF.
    IF <ls_d021s>-ltyp CA 'TSI'.
      ls_feld-hierarchy = ' -'.
    ENDIF.

    PERFORM fugr_get_feld_icon
      USING
        <ls_d021s>
      CHANGING
        ls_feld.

    ls_feld-prog = is_d020s-prog.
    ls_feld-dnum = is_d020s-dnum.

*post processing
    CASE <ls_d021s>-ltyp.
      WHEN 'O'.  "OK-Code
        ls_feld-type = ' OK '.
        ls_feld-line = '0'.
        ls_feld-coln = '0'.
        ls_feld-leng = ls_feld-vleng.
        ls_feld-fein = abap_undefined.
        ls_feld-fout = abap_undefined.
        ls_feld-oout = abap_undefined.
        ls_feld_redef-fobl = space.
        ls_feld-fixf = abap_false.
      WHEN OTHERS.
        ls_feld-type = <ls_d021s>-type.
    ENDCASE.

    CASE <ls_d021s>-fill.
      WHEN 'C'.  "Checkbutton
        ls_feld-scroll = abap_undefined.
        ls_feld-icon_x = abap_undefined.
        ls_feld_redef-fobl = space.
        ls_feld-fixf = abap_false.
      WHEN 'P'.  "Pushbutton
        ls_feld-scroll = abap_undefined.
        ls_feld_redef-fobl = space.
      WHEN 'R'.  "Frame
        ls_feld-fout = abap_true.
        ls_feld-scroll = abap_undefined.
        ls_feld_redef-fobl = space.
      WHEN 'T'.
        ls_feld_redef-fobl = space.
    ENDCASE.

    CASE ls_feld-gtyp.
      WHEN 'Check'.
        IF <ls_d021s>-ityp = '0'.
          ls_feld-scroll = abap_undefined.
          ls_feld-fein = abap_false.
          ls_feld-fout = abap_false.
          ls_feld-oout = abap_false.
          ls_feld-type = space.
          ls_feld-icon_x = abap_undefined.
          ls_feld_redef-fobl = space.
          ls_feld-paid = space.
          ls_feld-cmbfoc = abap_false.
          ls_feld-ucnv = space.
        ENDIF.
      WHEN 'CuCtr'.
        ls_feld-scroll = abap_undefined.
        ls_feld-fein = abap_false.
        ls_feld-fout = abap_false.
        ls_feld-oout = abap_false.
        ls_feld-type = space.
        ls_feld-icon_x = abap_undefined.
        ls_feld_redef-fobl = space.
        ls_feld-paid = space.
        ls_feld-cmbfoc = abap_false.
        ls_feld-ucnv = space.
      WHEN 'Frame'.
        ls_feld-scroll = abap_undefined.
        ls_feld-icon_x = abap_undefined.
        IF ls_feld-stxt CN ' _'.
          ls_feld-fein = abap_false.
          ls_feld-fout = abap_false.
          ls_feld-oout = abap_false.
          ls_feld-type = space.
          ls_feld_redef-fobl = space.
          ls_feld-paid = space.
          ls_feld-cmbfoc = abap_false.
          ls_feld-ucnv = space.
        ENDIF.
      WHEN 'I/O'.
        IF is_dynpro_release <= lcs_dynpro_rel_402.
          ls_feld-fixf = abap_false.
        ENDIF.
      WHEN 'Push'.
        ls_feld-scroll = abap_undefined.
        ls_feld-mtch = space.
        IF <ls_d021s>-flg1 Z lc_flg1edt.
          ls_feld-fein = abap_false.
          ls_feld-fout = abap_false.
          ls_feld-oout = abap_false.
          ls_feld-type = space.
          ls_feld-icon_x = abap_undefined.
          ls_feld_redef-fobl = space.
          ls_feld-paid = space.
          ls_feld-cmbfoc = abap_false.
          ls_feld-ucnv = space.
        ENDIF.
      WHEN 'Radio'.
        ls_feld-scroll = abap_undefined.
        ls_feld-icon_x = abap_undefined.
        ls_feld_redef-fobl = space.
        IF ls_feld-fcod IS INITIAL.
          ls_feld-fein = abap_false.
          ls_feld-fout = abap_false.
          ls_feld-oout = abap_false.
          ls_feld-type = space.
          ls_feld-icon_x = abap_undefined.
          ls_feld_redef-fobl = space.
          ls_feld-paid = space.
          ls_feld-cmbfoc = abap_false.
          ls_feld-ucnv = space.
        ENDIF.
      WHEN 'SubSc'.
        ls_feld-scroll = abap_undefined.
        ls_feld-icon_x = abap_undefined.
        ls_feld_redef-fobl = space.
        IF ls_feld-fcod IS INITIAL.
          ls_feld-fein = abap_false.
          ls_feld-fout = abap_false.
          ls_feld-oout = abap_false.
          ls_feld-type = space.
          ls_feld-icon_x = abap_undefined.
          ls_feld_redef-fobl = space.
          ls_feld-paid = space.
          ls_feld-cmbfoc = abap_false.
          ls_feld-ucnv = space.
        ENDIF.
      WHEN 'Table'.
        ls_feld-fein = abap_false.
        ls_feld-fout = abap_false.
        ls_feld-oout = abap_false.
        ls_feld-type = space.
        ls_feld-dict = abap_false.
        ls_feld-dmod = abap_false.
      WHEN 'TbStr'.
        ls_feld-scroll = abap_undefined.
        ls_feld-fein = abap_false.
        ls_feld-fout = abap_false.
        ls_feld-oout = abap_false.
        ls_feld-type = space.
        ls_feld-icon_x = abap_undefined.
        ls_feld_redef-fobl = space.
        ls_feld-paid = space.
        ls_feld-cmbfoc = abap_false.
        ls_feld-ucnv = space.
      WHEN 'Text'.
        ls_feld-scroll = abap_undefined.
        ls_feld-fein = abap_false.
        ls_feld-fout = abap_false.
        ls_feld-oout = abap_false.
        ls_feld-type = space.
        ls_feld-icon_x = abap_undefined.
        ls_feld_redef-fobl = space.
        ls_feld-paid = space.
        ls_feld-cmbfoc = abap_false.
        ls_feld-ucnv = space.
        IF ls_feld-fixf = abap_false
        AND ls_feld-hell = abap_false
        AND ls_feld-unsi = abap_false
        AND <ls_d021s>-ltyp = space
        AND ls_feld-labelright = abap_false
        AND <ls_d021s>-flg1 <> '00'.
          ls_feld-labelleft = abap_true.
        ENDIF.
    ENDCASE.

    IF NOT ls_feld-stxt IS INITIAL.
      IF ls_feld-stxt NA '_'.
        l_length = <ls_d021s>-leng.
        IF l_length > 132.
          l_length = 132.
        ENDIF.
        l_strlen = strlen( ls_feld-stxt ).
        WHILE l_strlen < l_length.
          CONCATENATE ls_feld-stxt '_' INTO ls_feld-stxt.
          l_strlen = strlen( ls_feld-stxt ).
        ENDWHILE.
      ENDIF.
      IF <ls_d021s>-fill = 'R'.
        l_strlen = strlen( ls_feld-stxt ).
        l_length = l_strlen - 2.
        IF l_length > 0.
          ls_feld-stxt = ls_feld-stxt+0(l_length).
        ENDIF.
      ENDIF.
    ENDIF.

    APPEND ls_feld TO ct_feld.
    APPEND ls_feld_redef TO ct_feld_redef.
  ENDLOOP.
ENDFORM.                    "get_feldtab


*-----------------------------------------------------------------------
* fugr_get_feld_fill_na_btisu
*-----------------------------------------------------------------------
FORM fugr_get_feld_fill_na_btisu
  USING
    is_d021s TYPE d021s
    is_dynpro_release TYPE st_dynpro_release
  CHANGING
    cs_feld TYPE feld.

  DATA:
  ls_d021s_res1 LIKE d021s_res1.

  CONSTANTS:
  lc_flg1ddf TYPE x VALUE '20',
  lc_flg1edt TYPE x VALUE '80',
  lc_flg1osb TYPE x VALUE '04',
  lc_flg2gks TYPE x VALUE '02',
  lc_flg2gpa TYPE x VALUE '08',
  lc_flg2jus TYPE x VALUE '20',
  lc_flg2nrs TYPE x VALUE '40',
  lc_flg2spa TYPE x VALUE '04',
  lc_flg2str TYPE x VALUE '80',
  lc_flg3fdu TYPE x VALUE '02',
  lc_flg3fix TYPE x VALUE '40',
  lc_flg3fku TYPE x VALUE '08',
  lc_flg3for TYPE x VALUE '04',
  lc_flg3out TYPE x VALUE '80',
  lc_fmb1d23 TYPE x VALUE '02',
  lc_fmb1dnk TYPE x VALUE '04',
  lc_fmb1fix TYPE x VALUE '40',
  lc_fmb1ges TYPE x VALUE '20',
  lc_fmb1hll TYPE x VALUE '08',
  lc_fmb1out TYPE x VALUE '01',
  lc_fmb2cmb TYPE x VALUE '08',
  lc_fmb2cmi TYPE x VALUE '04',
  lc_fmb2cmu TYPE x VALUE '10',
  lcs_dynpro_rel_400 TYPE st_dynpro_release VALUE '4.00',
  lcs_dynpro_rel_401 TYPE st_dynpro_release VALUE '4.01',
  lcs_dynpro_rel_402 TYPE st_dynpro_release VALUE '4.02',
  lcs_dynpro_rel_46a TYPE st_dynpro_release VALUE '4.60',
  lcs_dynpro_rel_610 TYPE st_dynpro_release VALUE '6.10'.


  CHECK is_d021s-fill NA 'BTISU'.

  ls_d021s_res1 = is_d021s-res1.

  IF is_d021s-flg2 O lc_flg2str.
    cs_feld-fstr = abap_true.
  ENDIF.
  IF is_d021s-flg2 O lc_flg2nrs.
    cs_feld-fnrs = abap_true.
  ENDIF.
  IF is_d021s-flg2 O lc_flg2gks.
    cs_feld-fgks = abap_true.
  ENDIF.
  IF is_d021s-flg3 O lc_flg3fix.
    cs_feld-ffix = abap_true.
  ENDIF.
  IF is_d021s-flg1 O lc_flg1osb.
    cs_feld-fosb = abap_true.
  ENDIF.
  IF is_d021s-flg2 O lc_flg2jus.
    cs_feld-fjus = abap_true.
  ENDIF.
  IF is_d021s-fill = '0'.
    cs_feld-fill = abap_true.
  ENDIF.
  IF is_d021s-flg2 O lc_flg2gpa.
    cs_feld-fgpa = abap_true.
  ENDIF.
  IF is_d021s-flg2 O lc_flg2spa.
    cs_feld-fspa = abap_true.
  ENDIF.
  IF is_d021s-flg1 O lc_flg1ddf
  AND is_d021s-flg3 O lc_flg3for
  AND is_d021s-flg3 Z lc_flg3fdu
  AND is_d021s-flg3 Z lc_flg3fku.
    cs_feld-ffky = 'X'.
  ENDIF.
  IF is_d021s-flg1 O lc_flg1edt.
    IF is_d021s-fmb1 Z lc_fmb1ges.
      cs_feld-fein = abap_true.
    ELSE.
      cs_feld-fein = abap_false.
    ENDIF.
    IF is_d021s-flg3 O lc_flg3out.
      cs_feld-fout = abap_true.
    ELSE.
      cs_feld-fout = abap_false.
    ENDIF.
    IF is_d021s-fmb1 O lc_fmb1out.
      cs_feld-oout = abap_true.
    ELSE.
      cs_feld-oout = abap_false.
    ENDIF.
  ENDIF.
  cs_feld-paid = is_d021s-paid.
  cs_feld-ucnv = is_d021s-ucnv.
  IF is_d021s-fmb1 O lc_fmb1hll.
    cs_feld-hell = abap_true.
  ENDIF.
  IF is_d021s-fmb1 O lc_fmb1dnk.
    cs_feld-unsi = abap_true.
  ENDIF.
  IF is_d021s-fmb1 O lc_fmb1d23.
    cs_feld-no3d = abap_true.
  ENDIF.
  IF is_dynpro_release <= lcs_dynpro_rel_402.
    IF cs_feld-oout = abap_true
    AND cs_feld-fout = abap_true
    AND is_d021s-flg3 Z lc_flg3out.
      cs_feld-fixf = abap_true.
    ELSEIF cs_feld-oout = abap_false
    AND is_d021s-fmb1 O lc_fmb1out.
      cs_feld-fixf = abap_true.
    ENDIF.
  ENDIF.
  IF is_d021s-fmb1 O lc_fmb1fix.
    cs_feld-fixf = abap_true.
  ENDIF.
  cs_feld-labelleft = ls_d021s_res1-labelleft.
  cs_feld-labelright = ls_d021s_res1-labelright.
  cs_feld-dblclick = ls_d021s_res1-dblclick.

  IF is_d021s-fill <> 'P'
  AND is_d021s-dmac <> space.
    cs_feld-cmbfoc = abap_true.
  ENDIF.

  IF is_d021s-fmb2 Z lc_fmb2cmb.
    cs_feld-cmbfoc = abap_false.
  ELSE.
    cs_feld-cmbfoc  = abap_true.
  ENDIF.
  IF is_d021s-fmb2 Z lc_fmb2cmu
  AND is_d021s-fmb2 Z lc_fmb2cmi.
    cs_feld-cmbtast = space.
  ELSEIF is_d021s-fmb2 O lc_fmb2cmu
  AND is_d021s-fmb2 O lc_fmb2cmi.
    cs_feld-cmbtast = '0'.
  ELSEIF is_d021s-fmb2 O lc_fmb2cmu
  AND is_d021s-fmb2 Z lc_fmb2cmi.
    cs_feld-cmbtast = '1'.
  ELSEIF is_d021s-fmb2 Z lc_fmb2cmu
  AND is_d021s-fmb2 O lc_fmb2cmi.
    cs_feld-cmbtast = '2'.
  ENDIF.
ENDFORM.                    "get_feld_fill_na_btisu


*-----------------------------------------------------------------------
* fugr_get_feld_icon
*-----------------------------------------------------------------------
FORM fugr_get_feld_icon
  USING
    is_d021s TYPE d021s
  CHANGING
    cs_feld TYPE feld.

  DATA:
  l_icon_id_pure(2) TYPE c,
  ls_icon TYPE icon,
  ls_icont TYPE icont,
  l_id_and_param(132) TYPE c,
  l_is_non_icon TYPE flag,
  l_pos_at TYPE i,
  l_quick_is TYPE flag,
  l_strlen TYPE i.

  FIELD-SYMBOLS:
  <l_fs> TYPE ANY.

  CONSTANTS:
  lc_flg1edt TYPE x VALUE '80'.


  CHECK is_d021s-stxt(1) = '@'.

  ASSIGN is_d021s-stxt+1(*) TO <l_fs>.
  IF <l_fs> CA '@'.
    l_pos_at = sy-fdpos + 1.
    l_id_and_param = <l_fs>(sy-fdpos).
    IF l_id_and_param CS '\Q'.
      l_quick_is = abap_true.
      SPLIT l_id_and_param AT '\Q'
            INTO l_icon_id_pure
                 cs_feld-icon_q.
      CONCATENATE '@' l_icon_id_pure '@'
            INTO cs_feld-icon.
    ELSE.
      l_quick_is = abap_false.
      CONCATENATE '@' l_id_and_param '@'
            INTO cs_feld-icon.
    ENDIF.
    IF cs_feld-icon = '@@'.
      CLEAR cs_feld-icon.
      l_is_non_icon = abap_true.
    ENDIF.
    SELECT SINGLE * FROM icon INTO ls_icon
        WHERE id = cs_feld-icon.
    IF sy-subrc = 0.
      SELECT SINGLE * FROM icont INTO ls_icont
          WHERE id = cs_feld-icon
          AND langu = sy-langu.
      cs_feld-icon_n = ls_icon-name.
    ELSE.
      cs_feld-icon_n = space.
    ENDIF.
    IF cs_feld-icon_q IS INITIAL
    AND l_quick_is = abap_false.
      cs_feld-icon_q = ls_icont-quickinfo.
    ENDIF.
    l_pos_at = l_pos_at + 1.
    ASSIGN is_d021s-stxt+l_pos_at(*) TO <l_fs>.
    l_strlen = strlen( <l_fs> ).
    IF l_strlen > 0.
      IF l_is_non_icon = abap_true.
      ELSE.
        l_pos_at = l_pos_at + 1.
      ENDIF.
      cs_feld-stxt = is_d021s-stxt+l_pos_at.
    ELSE.
      cs_feld-stxt = space.
    ENDIF.
  ENDIF.
  UNASSIGN <l_fs>.

  IF cs_feld-icon = '@00@'
  AND is_d021s-flg1 O lc_flg1edt.
    cs_feld-icon_x = abap_true.
  ENDIF.
ENDFORM.                    "get_feld_icon


*-----------------------------------------------------------------------
* fugr_r3tr_fugr                                Function group
*-----------------------------------------------------------------------
FORM fugr_r3tr_fugr.

  DATA:
  l_progname TYPE progname,
  lt_tabstrip TYPE it_tabstrip,
  ls_ti TYPE st_textinput,
  lt_attributes TYPE it_textinput,
  lt_documentation TYPE it_string,
  ls_progdir TYPE progdir,
  ls_tadir TYPE tadir,
  l_name TYPE ad_namtext,
  lt_html TYPE it_string.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_tabstrip> TYPE st_tabstrip.

*Tabstrip
  PERFORM get_tabstrip
    USING 'FUGR_R3TR_FUGR' space
    CHANGING lt_tabstrip.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'FUGR'
      AND futype = gc_futype_group
      AND downloaded = abap_false.
    <ls_ztadir>-downloaded = abap_true.

    CLEAR:
    l_name,
    l_progname,
    ls_progdir,
    ls_tadir.

    REFRESH:
    lt_attributes,
    lt_documentation,
    lt_html.

    CALL FUNCTION 'RS_TADIR_TO_PROGNAME'
      EXPORTING
        object   = <ls_ztadir>-object
        obj_name = <ls_ztadir>-obj_name
      IMPORTING
        progname = l_progname.

    SELECT SINGLE * FROM progdir INTO ls_progdir
      WHERE name = l_progname.
    SELECT SINGLE * FROM tadir INTO ls_tadir
      WHERE pgmid = 'R3TR'
      AND object = 'FUGR'
      AND obj_name = <ls_ztadir>-obj_name.

*Attributes
*   Function group
    CLEAR ls_ti.
    ls_ti-name = txt_function_group.
    ls_ti-input = abap_true.
    ls_ti-value = <ls_ztadir>-obj_name.
    APPEND ls_ti TO lt_attributes.
*   Description
    CLEAR ls_ti.
    ls_ti-name = txt_short_text___1.
    ls_ti-input = abap_true.
    ls_ti-value = <ls_ztadir>-descript.
    APPEND ls_ti TO lt_attributes.
*   Empty row
    CLEAR ls_ti.
    ls_ti-space = abap_true.
    APPEND ls_ti TO lt_attributes.
*   Person responsible
    CLEAR ls_ti.
    ls_ti-name = txt_person_responsible___1.
    ls_ti-input = abap_true.
    ls_ti-value = ls_tadir-author.
    PERFORM get_user
      USING
        ls_tadir-author
      CHANGING
        l_name.
    ls_ti-value_text = l_name.
    APPEND ls_ti TO lt_attributes.
*   Package
    CLEAR ls_ti.
    ls_ti-name = txt_package.
    ls_ti-input = abap_true.
    ls_ti-value = ls_tadir-devclass.
    APPEND ls_ti TO lt_attributes.
*   Application
    CLEAR ls_ti.
    ls_ti-name = txt_application.
    ls_ti-input = abap_true.
    ls_ti-value = ls_progdir-appl.
    APPEND ls_ti TO lt_attributes.
*   Status
    CLEAR ls_ti.
    ls_ti-name = txt_status.
    ls_ti-input = abap_true.
    IF ls_progdir-state = 'A'.
      ls_ti-value = txt_activated.
    ELSE.
      ls_ti-value = txt_inactive.
    ENDIF.
    APPEND ls_ti TO lt_attributes.
*   Program status
    CLEAR ls_ti.
    ls_ti-name = txt_program_status.
    ls_ti-input = abap_true.
    ls_ti-value = ls_progdir-rstat.
    PERFORM get_dom_value_text
      USING 'RSTAT' ls_progdir-rstat
      CHANGING ls_ti-value_text.
    APPEND ls_ti TO lt_attributes.
*   Editor lock
    CLEAR ls_ti.
    ls_ti-name = txt_editor_lock.
    ls_ti-flag = abap_true.
    ls_ti-value = ls_progdir-edtx.
    APPEND ls_ti TO lt_attributes.
*   Fixed point arithmetic
    CLEAR ls_ti.
    ls_ti-name = txt_fixed_point_arithmetic.
    ls_ti-flag = abap_true.
    ls_ti-value = ls_progdir-fixpt.
    APPEND ls_ti TO lt_attributes.
*   Unicode checks active
    CLEAR ls_ti.
    ls_ti-name = txtt_unicode_checks_active.
    ls_ti-flag = abap_true.
    ls_ti-value = ls_progdir-uccheck.
    APPEND ls_ti TO lt_attributes.
*Documentation
    PERFORM get_docu
      USING
        'RE'
        l_progname
        'E'
      CHANGING
        lt_documentation.
***Tabstrip
    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'DOCUMENTATION'.
          IF lt_documentation IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
      ENDCASE.
    ENDLOOP.

*** HTML
    PERFORM html_main_header
      USING
        tpt_fugr_fugr
        space
        <ls_ztadir>-obj_name
        space
        space
        space
        'makeDivSize(''MAIN_PROG'');makeDivSize(''DOCUMENTATION'');'
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*   Attributes
    PERFORM html_add_textinput
      USING
        lt_attributes
        'ATTRIBUTES'
        abap_true
      CHANGING
        lt_html.
*Main program
    PERFORM add_report_sourcecode
      USING
        l_progname
        l_progname
        gc_extension_txt
        abap_true
        <ls_ztadir>
        'MAIN_PROG'
        abap_false
      CHANGING
        lt_html.
*Documentation
    IF NOT lt_documentation IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_doc
        USING
          lt_documentation
          'DOCUMENTATION'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*
    PERFORM html_main_footer
      USING
        lt_html.

    PERFORM download
      USING
        lt_html
        <ls_ztadir>-pgmid
        <ls_ztadir>-object
        l_progname
        gc_extension_htm
        abap_true.
  ENDLOOP.

ENDFORM.                                                    "r3tr_fugr


*-----------------------------------------------------------------------
* fugr_r3tr_includes                            Includes
*-----------------------------------------------------------------------
FORM fugr_r3tr_includes.

  DATA:
  lt_tabstrip TYPE it_tabstrip,
  lt_html TYPE it_string,
  ls_attributes TYPE st_attributes,
  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.

*Tabstrip
  PERFORM get_tabstrip
    USING 'FUGR_R3TR_INCLUDES' space
    CHANGING lt_tabstrip.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'FUGR'
      AND futype = gc_futype_include
      AND downloaded = abap_false.

    CLEAR:
    ls_attributes,
    ls_trdir,
    l_text,
    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.
*   Space
    CLEAR ls_ti.
    ls_ti-space = 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


*-----------------------------------------------------------------------
* fugr_r3tr_modules                             Funktionsbausteine
*-----------------------------------------------------------------------
FORM fugr_r3tr_modules.

  DATA:
  ls_tabstrip TYPE st_tabstrip,
  lt_tabstrip TYPE it_tabstrip,
  lt_classification TYPE it_textinput,
  ls_classification TYPE st_textinput,
  lt_processing_type TYPE it_access,
  ls_processing_type TYPE st_access,
  lt_general_data TYPE it_textinput,
  ls_general_data TYPE st_textinput,
  lt_html TYPE it_string,
  lt_ptfdir TYPE STANDARD TABLE OF tfdir,
  ls_ptfdir TYPE tfdir,
  lt_ptftit TYPE STANDARD TABLE OF tftit,
  ls_ptftit TYPE tftit,
  lt_pfunct TYPE STANDARD TABLE OF funct,
  ls_pfunct TYPE funct,
  lt_penlfdir TYPE STANDARD TABLE OF enlfdir,
  ls_penlfdir TYPE enlfdir,
  lt_ptrdir TYPE STANDARD TABLE OF trdir,
  ls_ptrdir TYPE trdir,
  lt_pfupararef TYPE STANDARD TABLE OF sfupararef,
  lt_uincl TYPE it_abaptxt255,
  lt_vsmodisrc TYPE STANDARD TABLE OF smodisrc,
  lt_vsmodilog TYPE STANDARD TABLE OF smodilog,
  lt_parameter TYPE it_parameter,
  ls_parameter TYPE st_parameter,
  lt_importing TYPE it_parameter,
  lt_exporting TYPE it_parameter,
  lt_changing TYPE it_parameter,
  lt_table TYPE it_parameter,
  lt_exception TYPE it_parameter,
  l_kind TYPE char1,
  lt_doku TYPE it_string,
  lt_documentation TYPE it_string,
  lt_sourcecode TYPE it_string,
  l_sourcecode TYPE string,
  l_namtext TYPE ad_namtext,
  l_javascript TYPE string,
  l_id TYPE string,
  l_filename TYPE string,
  l_on TYPE flag,
  l_areat TYPE areat.

  FIELD-SYMBOLS:
  <ls_tabstrip> TYPE st_tabstrip,
  <ls_ztadir> TYPE st_ztadir,
  <ls_parameter> TYPE st_parameter,
  <ls_pfupararef> TYPE sfupararef,
  <ls_uincl> TYPE st_abaptxt255.


  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'FUGR'
      AND futype = gc_futype_module
      AND downloaded = abap_false.
    <ls_ztadir>-downloaded = abap_true.

    CLEAR:
    ls_classification,
    ls_general_data,
    l_javascript,
    ls_parameter,
    ls_penlfdir,
    ls_pfunct,
    ls_processing_type,
    ls_ptfdir,
    ls_ptftit,
    ls_ptrdir,
    l_sourcecode,
    l_areat.

    REFRESH:
    lt_changing,
    lt_classification,
    lt_exception,
    lt_exporting,
    lt_general_data,
    lt_html,
    lt_importing,
    lt_parameter,
    lt_processing_type,
    lt_sourcecode,
    lt_table,
    lt_uincl.

    CALL FUNCTION 'FUNC_GET_OBJECT'
      EXPORTING
        funcname   = <ls_ztadir>-funcname
        r3state    = 'A'
      TABLES
        ptfdir     = lt_ptfdir
        ptftit     = lt_ptftit
        pfunct     = lt_pfunct
        penlfdir   = lt_penlfdir
        ptrdir     = lt_ptrdir
        pfupararef = lt_pfupararef
        uincl      = lt_uincl
        vsmodisrc  = lt_vsmodisrc
        vsmodilog  = lt_vsmodilog
      EXCEPTIONS
        OTHERS     = 1.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.

    IF NOT lt_ptfdir IS INITIAL.
      READ TABLE lt_ptfdir INTO ls_ptfdir INDEX 1.
    ENDIF.
    IF NOT lt_ptftit IS INITIAL.
      READ TABLE lt_ptftit INTO ls_ptftit INDEX 1.
    ENDIF.
    IF NOT lt_penlfdir IS INITIAL.
      READ TABLE lt_penlfdir INTO ls_penlfdir INDEX 1.
    ENDIF.
    IF NOT lt_ptrdir IS INITIAL.
      READ TABLE lt_ptrdir INTO ls_ptrdir INDEX 1.
    ENDIF.

*Attributes - Classification
    ls_classification-name = txt_function_group.
    ls_classification-value = ls_penlfdir-area.
    ls_classification-input = abap_true.
    ls_classification-has_value_ext = abap_true.
    SELECT SINGLE areat FROM tlibt INTO l_areat
        WHERE area = <ls_ztadir>-obj_name
        AND spras = sy-langu.
    ls_classification-value_ext = l_areat.
    APPEND ls_classification TO lt_classification.
    CLEAR ls_classification.
    ls_classification-name = txt_short_text___1.
    ls_classification-value = ls_ptftit-stext.
    ls_classification-input = abap_true.
    APPEND ls_classification TO lt_classification.

*Attributes - Processing type
    ls_processing_type-ddtext = txt_normal_function_module.
    IF ls_ptfdir-fmode IS INITIAL AND ls_ptfdir-utask IS INITIAL.
      ls_processing_type-checked = abap_true.
    ELSE.
      ls_processing_type-checked = abap_true.
    ENDIF.
    APPEND ls_processing_type TO lt_processing_type.
    ls_processing_type-ddtext = txt_remote_enabled_module.
    IF NOT ls_ptfdir-fmode IS INITIAL.
      ls_processing_type-checked = abap_true.
    ELSE.
      ls_processing_type-checked = abap_true.
    ENDIF.
    APPEND ls_processing_type TO lt_processing_type.
    ls_processing_type-ddtext = txt_update_module.
    IF NOT ls_ptfdir-utask IS INITIAL.
      ls_processing_type-checked = abap_true.
    ELSE.
      ls_processing_type-checked = abap_true.
    ENDIF.
    APPEND ls_processing_type TO lt_processing_type.

    ls_processing_type-ddtext = txt_start_immed.
    ls_processing_type-sub = '1'.
    IF ls_ptfdir-utask IS INITIAL OR ls_ptfdir-utask = '1'.
      ls_processing_type-checked = abap_true.
    ELSE.
      ls_processing_type-checked = abap_false.
    ENDIF.
    APPEND ls_processing_type TO lt_processing_type.
    ls_processing_type-ddtext = txt_immediate_start_no_restart.
    ls_processing_type-sub = '1'.
    IF ls_ptfdir-utask = '3'.
      ls_processing_type-checked = abap_true.
    ELSE.
      ls_processing_type-checked = abap_false.
    ENDIF.
    APPEND ls_processing_type TO lt_processing_type.
    ls_processing_type-ddtext = txt_start_delayed.
    ls_processing_type-sub = '1'.
    IF ls_ptfdir-utask = '2'.
      ls_processing_type-checked = abap_true.
    ELSE.
      ls_processing_type-checked = abap_false.
    ENDIF.
    APPEND ls_processing_type TO lt_processing_type.
    ls_processing_type-ddtext = txt_coll_run.
    ls_processing_type-sub = '1'.
    IF ls_ptfdir-utask = '5'.
      ls_processing_type-checked = abap_true.
    ELSE.
      ls_processing_type-checked = abap_false.
    ENDIF.
    APPEND ls_processing_type TO lt_processing_type.

*Attributes - General Data
    ls_general_data-name = txt_person_responsible___1.
    ls_general_data-input = abap_true.
    ls_general_data-value = ls_ptrdir-cnam.
    PERFORM get_user
      USING
        ls_ptrdir-cnam
      CHANGING
        l_namtext.
    ls_general_data-value_text = l_namtext.
    APPEND ls_general_data TO lt_general_data.
    CLEAR ls_general_data.
    ls_general_data-name = txt_last_changed_by___2.
    ls_general_data-input = abap_true.
    ls_general_data-value = ls_ptrdir-unam.
    PERFORM get_user
      USING
        ls_ptrdir-unam
      CHANGING
        l_namtext.
    ls_general_data-value_text = l_namtext.
    APPEND ls_general_data TO lt_general_data.
    CLEAR ls_general_data.
    ls_general_data-name = txt_changed_on.
    ls_general_data-input = abap_true.
    PERFORM get_date USING ls_ptrdir-udat
                    CHANGING ls_general_data-value.
    APPEND ls_general_data TO lt_general_data.
    ls_general_data-name = txt_package.
    ls_general_data-input = abap_true.
    ls_general_data-value = <ls_ztadir>-devclass.
    APPEND ls_general_data TO lt_general_data.
    ls_general_data-name = txt_program_name.
    ls_general_data-input = abap_true.
    ls_general_data-value = ls_ptfdir-pname.
    APPEND ls_general_data TO lt_general_data.
    ls_general_data-name = txt_include_name.
    ls_general_data-input = abap_true.
    ls_general_data-value = ls_ptrdir-name.
    APPEND ls_general_data TO lt_general_data.
    ls_general_data-name = txt_original_language.
    ls_general_data-input = abap_true.
    ls_general_data-value = ls_ptftit-spras.
    APPEND ls_general_data TO lt_general_data.
    IF NOT ls_ptfdir-freedate IS INITIAL
    AND ls_ptfdir-freedate > 19000101.
      ls_general_data-name = txt_internally_released_on.
      PERFORM get_date USING ls_ptfdir-freedate
                      CHANGING ls_general_data-value.
      ls_general_data-input = abap_true.
    ELSE.
      ls_general_data-name = txt_not_released.
      ls_general_data-value = space.
      ls_general_data-input = abap_false.
    ENDIF.
    APPEND ls_general_data TO lt_general_data.
    CLEAR ls_general_data.
    ls_general_data-name = txt_edit_lock.
    ls_general_data-flag = abap_true.
    ls_general_data-value = ls_ptrdir-edtx.
    APPEND ls_general_data TO lt_general_data.
    ls_general_data-name = txt_global.
    ls_general_data-flag = abap_true.
    ls_general_data-value = ls_penlfdir-global.
    APPEND ls_general_data TO lt_general_data.

*Parameter
    SORT lt_pfupararef BY pposition.
    LOOP AT lt_pfupararef ASSIGNING <ls_pfupararef>.
      CLEAR ls_parameter.
      l_kind = 'P'.
      IF <ls_pfupararef>-paramtype = 'X'.
        l_kind = 'X'.
      ENDIF.
      ls_parameter-name = <ls_pfupararef>-parameter.
      IF <ls_pfupararef>-type = abap_true.
        ls_parameter-typing = 'TYPE'.
      ELSEIF <ls_pfupararef>-ref_class = abap_true.
        ls_parameter-typing = 'TYPE REF TO'.
      ELSE.
        ls_parameter-typing = 'LIKE'.
      ENDIF.
      ls_parameter-structure = <ls_pfupararef>-structure.
      ls_parameter-defvalue = <ls_pfupararef>-defaultval.
      ls_parameter-optional = <ls_pfupararef>-optional.
      IF <ls_pfupararef>-reference = abap_false.
        ls_parameter-passvalue = abap_true.
      ENDIF.
      READ TABLE lt_pfunct INTO ls_pfunct
          WITH KEY parameter = <ls_pfupararef>-parameter
                   kind = l_kind
                   spras = sy-langu.
      IF sy-subrc <> 0.
        READ TABLE lt_pfunct INTO ls_pfunct
            WITH KEY parameter = <ls_pfupararef>-parameter
                     kind = l_kind
                     spras = sy-langu.
      ENDIF.
      ls_parameter-stext = ls_pfunct-stext.
*     Long Text
      ls_parameter-ltext_doku_obj = <ls_ztadir>-funcname.
      ls_parameter-ltext_doku_obj+30 = <ls_pfupararef>-parameter.

      SELECT SINGLE object FROM dokhl INTO ls_parameter-ltext_doku_obj
        WHERE id = 'FU'
        AND object = ls_parameter-ltext_doku_obj
        AND langu = sy-langu.
      IF sy-subrc = 0.
        ls_parameter-ltext = '-->'.
        CONCATENATE 'switchContent(''LTEXT_'
                <ls_pfupararef>-parameter ''')'
                INTO ls_parameter-ltext_onclick.
      ELSE.
        CLEAR ls_parameter-ltext_doku_obj.
      ENDIF.
*     Append
      APPEND ls_parameter TO lt_parameter.
      CASE <ls_pfupararef>-paramtype.
        WHEN 'I'.  "Importing
          APPEND ls_parameter TO lt_importing.
        WHEN 'E'.  "Exporting
          APPEND ls_parameter TO lt_exporting.
        WHEN 'C'.  "Changing
          APPEND ls_parameter TO lt_changing.
        WHEN 'T'.  "Tables
          APPEND ls_parameter TO lt_table.
        WHEN 'X'.  "Exceptions
          APPEND ls_parameter TO lt_exception.
      ENDCASE.
    ENDLOOP.

*Documentation
    PERFORM get_docu
      USING
        'FU'
        <ls_ztadir>-funcname
        'T'
      CHANGING
        lt_documentation.

*SourceCode
    LOOP AT lt_uincl ASSIGNING <ls_uincl>.
      l_sourcecode = <ls_uincl>-line.
      APPEND l_sourcecode TO lt_sourcecode.
    ENDLOOP.

***Tabstrip
    PERFORM get_tabstrip
      USING 'FUGR_R3TR_MODULES' space
      CHANGING lt_tabstrip.

    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'DOCUMENTATION'.
          IF lt_documentation IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'IMPORT'.
          IF lt_importing IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'EXPORT'.
          IF lt_exporting IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'CHANGING'.
          IF lt_changing IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'TABLES'.
          IF lt_table IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'EXCEPTIONS'.
          IF lt_exception IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'SOURCECODE'.
          IF lt_sourcecode IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
      ENDCASE.
    ENDLOOP.

*     Long text
    CONCATENATE
        'makeDivSize(''DOCUMENTATION'');'
        'makeDivSize(''SOURCECODE'');'
        INTO l_javascript.
    LOOP AT lt_parameter ASSIGNING <ls_parameter>
        WHERE ltext = '-->'.
      CLEAR ls_tabstrip.
      CONCATENATE 'LTEXT_' <ls_parameter>-name
          INTO ls_tabstrip-id.
      ls_tabstrip-hidden = abap_true.
      APPEND ls_tabstrip TO lt_tabstrip.
      CONCATENATE
          l_javascript
          'makeDivSize(''' ls_tabstrip-id ''');'
          INTO l_javascript.
    ENDLOOP.

*** HTML
    PERFORM html_main_header
      USING
        tpt_fugr_fuba
        txt_function_module
        <ls_ztadir>-funcname
        txt_active___1
        space
        space
        l_javascript
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*   Attributes
    IF lt_sourcecode IS INITIAL
      AND g_empty_tab <> gc_empty_tab_display.
      l_on = abap_true.
    ELSE.
      l_on = abap_false.
    ENDIF.
    PERFORM html_add_box1ti_2rb_ti
      USING
        txt_classification
        lt_classification
        txt_processing_type
        'PTYPE'
        lt_processing_type
        txt_general_data
        lt_general_data
        'ATTRIBUTES'
        l_on
      CHANGING
        lt_html.
*   Importing
    IF NOT lt_importing IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'MODU_IMPOR'
          lt_importing
          lt_importing
          'IMPORT'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*   Exporting
    IF NOT lt_exporting IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'MODU_EXPOR'
          lt_exporting
          lt_exporting
          'EXPORT'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*   Changing
    IF NOT lt_changing IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'MODU_IMPOR'
          lt_changing
          lt_changing
          'CHANGING'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*   Tables
    IF NOT lt_table IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'MODU_TABLE'
          lt_table
          lt_table
          'TABLES'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*   Exceptions
    IF NOT lt_exception IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'MODU_EXCEP'
          lt_exception
          lt_exception
          'EXCEPTIONS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*   SourceCode
    IF NOT lt_sourcecode IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      IF g_add_sourcecode = abap_true.
        l_filename = <ls_ztadir>-funcname.
        PERFORM download
          USING
            lt_sourcecode
            <ls_ztadir>-pgmid
            <ls_ztadir>-object
            l_filename
            gc_extension_txt
            abap_false.
      ENDIF.
      PERFORM html_add_sourcecode
        USING
          lt_sourcecode
          l_filename
          space
          space
          gc_extension_txt
          'SOURCECODE'
          abap_true
        CHANGING
          lt_html.
    ENDIF.
*   Documentation
    IF NOT lt_documentation IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_doc
        USING
          lt_documentation
          'DOCUMENTATION'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*   Long texts
    LOOP AT lt_parameter ASSIGNING <ls_parameter>
        WHERE ltext = '-->'.
      REFRESH lt_doku.
      PERFORM get_docu
        USING
          'FU'
          <ls_parameter>-ltext_doku_obj
          'T'
        CHANGING
          lt_doku.
      PERFORM get_id
        USING 'LTEXT_' <ls_parameter>-name
        CHANGING l_id.
      PERFORM html_add_doc
      USING
        lt_doku
        l_id
        abap_false
      CHANGING
        lt_html.
    ENDLOOP.
*
    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.
  ENDLOOP.
ENDFORM.                    "fugr_r3tr_modules


*-----------------------------------------------------------------------
* fugr_r3tr_screen                              Screens
*-----------------------------------------------------------------------
FORM fugr_r3tr_screen.

  DATA:
  lt_tabstrip TYPE it_tabstrip,
  ls_dynpro_name TYPE st_dynpro_name,
  ls_d020s TYPE d020s,                    "screen header
  lt_d021s TYPE STANDARD TABLE OF d021s,  "field list
  lt_d022s TYPE STANDARD TABLE OF d022s,  "flow logic
  lt_d023s TYPE d023s_tab,                "matchcode information
  ls_d023sx TYPE d023s_x,
  lt_d023x TYPE d023s_xtab,
  lt_feld TYPE STANDARD TABLE OF feld,
  lt_feld_redef TYPE it_feld_redef,
  lt_source TYPE it_string,
  lt_html TYPE it_string,
  ls_attributes TYPE st_attributes,
  lt_access_screen_type TYPE it_access,
  ls_access TYPE st_access,
  lt_ti_settings TYPE it_textinput,
  lt_ti_other TYPE it_textinput,
  ls_ti TYPE st_textinput,
  l_date_last_generation TYPE d,
  l_time_last_generation TYPE t,
  l_lines TYPE sycurow,
  l_cols TYPE sycucol,
  l_filename TYPE string,
  ls_dynpro_release TYPE st_dynpro_release,
  l_dynpro_release(4) TYPE c,
  l_title TYPE string.

  FIELD-SYMBOLS:
  <ls_d022s> TYPE d022s,
  <ls_d023s> TYPE d023s,
  <ls_ztadir> TYPE st_ztadir,
  <l_x> TYPE x.

  CONSTANTS:
  lc_type_cntcmp TYPE scrpdytype VALUE 'CNTCMP    ',
  lc_milikmp TYPE x VALUE '40',
  lc_miliksc TYPE x VALUE '08',
  lc_milinog TYPE x VALUE '20',
  lc_milinot TYPE x VALUE '04'.


*Tabstrip
  PERFORM get_tabstrip
    USING 'FUGR_R3TR_SCREEN' space
    CHANGING lt_tabstrip.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'FUGR'
      AND futype = gc_futype_screen
      AND downloaded = abap_false.

    CLEAR:
    ls_access,
    ls_attributes,
    ls_d020s,
    ls_d023sx,
    l_dynpro_release,
    ls_ti.

    REFRESH:
    lt_access_screen_type,
    lt_d021s,
    lt_d022s,
    lt_d023s,
    lt_d023x,
    lt_feld,
    lt_feld_redef,
    lt_html,
    lt_source,
    lt_ti_settings,
    lt_ti_other.

    ls_dynpro_name-prog = <ls_ztadir>-progname.
    ls_dynpro_name-dnum = <ls_ztadir>-dynpronr.
    IMPORT DYNPRO ls_d020s lt_d021s lt_d022s lt_d023s
        ID ls_dynpro_name.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.

    CALL FUNCTION 'RS_DYNPRO_RELEASE_GET'
      EXPORTING
        dynpro_header  = ls_d020s
      IMPORTING
        dynpro_release = l_dynpro_release
      EXCEPTIONS
        OTHERS         = 1.
    ls_dynpro_release = l_dynpro_release.

    LOOP AT lt_d023s ASSIGNING <ls_d023s> WHERE type = lc_type_cntcmp.
      ls_d023sx = <ls_d023s>-content.
      APPEND ls_d023sx-cccont TO lt_d023x.
    ENDLOOP.

*Attributes
    ls_attributes-descript = <ls_ztadir>-descript.
    ls_attributes-devclass = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING
        <ls_ztadir>-devclass
      CHANGING
        ls_attributes-devclass_descr.
    PERFORM get_spras
      USING
        ls_d020s-spra
      CHANGING
        ls_attributes-laiso
        ls_attributes-sptxt.
    PERFORM get_date
      USING
        ls_d020s-dgen
      CHANGING
        ls_attributes-date_last_changed.
    PERFORM get_time
      USING
        ls_d020s-tgen
      CHANGING
        ls_attributes-time_last_changed.

    CALL FUNCTION 'RS_SCRP_GET_GEN_DATA'
      EXPORTING
        progname = ls_d020s-prog
        dynnr    = ls_d020s-dnum
      IMPORTING
        gen_date = l_date_last_generation
        gen_time = l_time_last_generation
      EXCEPTIONS
        OTHERS   = 1.
    PERFORM get_date
      USING
        l_date_last_generation
      CHANGING
        ls_attributes-date_last_generation.
    PERFORM get_time
      USING
        l_time_last_generation
      CHANGING
        ls_attributes-time_last_generation.
*Attributes - Screen type
    CLEAR ls_access.
    ls_access-ddtext = txt_normal.
    ls_access-checked = abap_false.
    IF ls_d020s-type NA 'IMSWJ'.
      ls_access-checked = abap_true.
    ENDIF.
    APPEND ls_access TO lt_access_screen_type.
    ls_access-ddtext = txt_subscreen.
    ls_access-checked = abap_false.
    IF ls_d020s-type = 'I'.
      ls_access-checked = abap_true.
    ENDIF.
    APPEND ls_access TO lt_access_screen_type.
    ls_access-ddtext = txt_modal_dialog_box.
    ls_access-checked = abap_false.
    IF ls_d020s-type = 'M'.
      ls_access-checked = abap_true.
    ENDIF.
    APPEND ls_access TO lt_access_screen_type.
    ls_access-ddtext = txt_selection_screen.
    ls_access-checked = abap_false.
    IF ls_d020s-type CA 'SWJ'.
      ls_access-checked = abap_true.
    ENDIF.
    APPEND ls_access TO lt_access_screen_type.
*Attributes - Settings
    CLEAR ls_ti.
    IF ls_d020s-type <> 'I'.
      ls_ti-name = txt_hold_data.
      ls_ti-flag = abap_true.
      ls_ti-value = ls_d020s-hdat.
      APPEND ls_ti TO lt_ti_settings.
    ENDIF.
    ASSIGN ls_d020s-mili TO <l_x> CASTING.
    ls_ti-name = txt_switch_off_runtime_compres.
    ls_ti-flag = abap_true.
    IF <l_x> O lc_milikmp.
      ls_ti-value = abap_false.
    ELSE.
      ls_ti-value = abap_true.
    ENDIF.
    APPEND ls_ti TO lt_ti_settings.
    ls_ti-name = txt_template_non_executable.
    ls_ti-flag = abap_true.
    IF <l_x> O lc_milinog.
      ls_ti-value = abap_true.
    ELSE.
      ls_ti-value = abap_false.
    ENDIF.
    APPEND ls_ti TO lt_ti_settings.
    ls_ti-name = txt_hold_scroll_position.
    ls_ti-flag = abap_true.
    IF <l_x> O lc_miliksc.
      ls_ti-value = abap_true.
    ELSE.
      ls_ti-value = abap_false.
    ENDIF.
    APPEND ls_ti TO lt_ti_settings.
    ls_ti-name = txt_without_application_toolba.
    ls_ti-flag = abap_true.
    IF <l_x> O lc_milinot.
      ls_ti-value = abap_true.
    ELSE.
      ls_ti-value = abap_false.
    ENDIF.
    APPEND ls_ti TO lt_ti_settings.
*Attributes - Other attributes
    CLEAR ls_ti.
    ls_ti-name = txt_next_screen.
    ls_ti-value = ls_d020s-fnum.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_other.
    ls_ti-name = txt_cursor_position.
    ls_ti-value = ls_d020s-cupo.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_other.
    ls_ti-name = txt_screen_group.
    ls_ti-value = ls_d020s-dgrp.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti_other.
    ls_ti-name = txtt_lines_columns.
    ls_ti-name_suffix = txt_occupied.
    CALL FUNCTION 'RS_SCRP_GET_SCREEN_INFOS'
      EXPORTING
        progname = ls_d020s-prog
        dynnr    = ls_d020s-dnum
      IMPORTING
        lines    = l_lines
        columns  = l_cols
      EXCEPTIONS
        OTHERS   = 1.
    IF sy-subrc <> 0 OR l_lines > 999 OR l_cols > 999.
      l_lines = 0.
      l_cols = 0.
    ENDIF.
    ls_ti-value = l_lines.
    ls_ti-value_ext = l_cols.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_ti_other.
    ls_ti-name = space.
    ls_ti-name_suffix = txt_maintenance.
    ls_ti-value = ls_d020s-noli.
    ls_ti-value_ext = ls_d020s-noco.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_ti_other.
    CLEAR ls_ti.
    ls_ti-name = txtt_context_menu_form_on_ctme.
    READ TABLE lt_d023s ASSIGNING <ls_d023s>
        WITH KEY type = 'CTMENU'.
    IF sy-subrc = 0.
      ls_ti-value = <ls_d023s>-content.
    ENDIF.
    ls_ti-input = abap_true.
    UNASSIGN <ls_d023s>.
    APPEND ls_ti TO lt_ti_other.
*   Element list
    PERFORM fugr_get_feldtab
      USING
        ls_d020s
        lt_d021s
        lt_d023x
        ls_dynpro_release
      CHANGING
        lt_feld
        lt_feld_redef.

*SourceCode
    LOOP AT lt_d022s ASSIGNING <ls_d022s>.
      APPEND <ls_d022s>-line TO lt_source.
    ENDLOOP.

*** HTML
    l_title = tpt_fugr_scr.
    PERFORM replace_single
      USING '#NAME_VALUE#' <ls_ztadir>-progname
      CHANGING l_title.
    PERFORM html_main_header
      USING
        l_title
        txt_screen_number
        <ls_ztadir>-dynpronr
        txt_active___1
        space
        space
        'makeDivSize(''FLOW_LOGIC'');'
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*   Attributes
    PERFORM html_add_attributes_3
      USING
        ls_attributes
        txt_screen_type
        'scrType'
        lt_access_screen_type
        txt_settings
        lt_ti_settings
        txt_other_attributes
        lt_ti_other
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
*   Element list - begin
    PERFORM html_add_container_begin
      USING
        lt_tabstrip
        'ELEMENT_LIST'
        abap_false
      CHANGING
        lt_html.
    PERFORM html_add_table
      USING
*        lt_table_general_attr
        'SCRN_GENER'
        lt_feld_redef
        lt_feld
        'GENERAL_ATTR'
        abap_true
      CHANGING
        lt_html.
    PERFORM html_add_table
      USING
*        lt_table_texts_io_templates
        'SCRN_IOTEM'
        lt_feld_redef
        lt_feld
        'TEXTS_IO_TEMPLATES'
        abap_false
      CHANGING
        lt_html.
    PERFORM html_add_table
      USING
*        lt_table_special_attr
        'SCRN_SPECI'
        lt_feld_redef
        lt_feld
        'SPECIAL_ATTR'
        abap_false
      CHANGING
        lt_html.
    PERFORM html_add_table
      USING
*        lt_table_display_attr
        'SCRN_DISPL'
        lt_feld_redef
        lt_feld
        'DISPLAY_ATTR'
        abap_false
      CHANGING
        lt_html.
    PERFORM html_add_table
      USING
*        lt_table_mod_groups_func
        'SCRN_MODGR'
        lt_feld_redef
        lt_feld
        'MOD_GROUPS_FUNCTIONS'
        abap_false
      CHANGING
        lt_html.
    PERFORM html_add_table
      USING
*        lt_table_references
        'SCRN_REFER'
        lt_feld_redef
        lt_feld
        'REFERENCES'
        abap_false
      CHANGING
        lt_html.
    PERFORM html_add_container_end
      CHANGING
        lt_html.
*   Element list - end
*   Flow logic
    CONCATENATE <ls_ztadir>-progname '-' <ls_ztadir>-dynpronr
        INTO l_filename.
    PERFORM html_add_sourcecode
      USING
        lt_source
        l_filename
        space
        space
        gc_extension_txt
        'FLOW_LOGIC'
        abap_true
      CHANGING
        lt_html.
    IF g_add_sourcecode = abap_true.
      PERFORM download
        USING
          lt_source
          <ls_ztadir>-pgmid
          <ls_ztadir>-object
          l_filename
          gc_extension_txt
          abap_false.
    ENDIF.
*
    PERFORM html_main_footer
      USING
        lt_html.

    PERFORM download
      USING
        lt_html
        <ls_ztadir>-pgmid
        <ls_ztadir>-object
        l_filename
        gc_extension_htm
        abap_true.
    <ls_ztadir>-downloaded = abap_true.
  ENDLOOP.
ENDFORM.                    "r3tr_screen
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_O2                                     *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* o2
*-----------------------------------------------------------------------
FORM o2.
*BSP Application
  PERFORM o2_r3tr_wapa.
*BSP Applications
  PERFORM o2_r3tr_wapa_appl.
*Mimes
  PERFORM o2_r3tr_wapa_mime.
*BSP Extension
  PERFORM o2_r3tr_wtag.
*BSP Extensions
  PERFORM o2_r3tr_wtag_ext.
*XSLT
  PERFORM o2_r3tr_xslt.

ENDFORM.                    "o2


*-----------------------------------------------------------------------
* o2_get_mime_content
*-----------------------------------------------------------------------
FORM o2_get_mime_content
  USING
    value(i_objtype)
    value(i_class)
    value(i_objid)
  CHANGING
    ct_content_ascii TYPE it_o2content_ascii
    ct_content_binary TYPE it_o2content_binary
    c_filesize TYPE i.

  DATA:
  lo_io TYPE REF TO data,
  lo_phio TYPE REF TO data,
  lo_error TYPE REF TO data,
  lt_class_filter TYPE it_o2class_filter,
  lt_relation TYPE it_o2relation,
  lt_file_info TYPE it_o2file_info.

  FIELD-SYMBOLS:
  <ls_io> TYPE ANY,
  <ls_phio> TYPE ANY,
  <ls_error> TYPE ANY,
  <l_fs> TYPE ANY,
  <ls_relation> TYPE st_o2relation,
  <ls_file_info> TYPE st_o2file_info.

  CREATE DATA lo_io TYPE ('SKWF_IO').
  ASSIGN lo_io->* TO <ls_io>.
  CREATE DATA lo_phio TYPE ('SKWF_IO').
  ASSIGN lo_phio->* TO <ls_phio>.
  CREATE DATA lo_error TYPE ('SKWF_ERROR').
  ASSIGN lo_error->* TO <ls_error>.

  ASSIGN COMPONENT 'OBJTYPE' OF STRUCTURE <ls_io> TO <l_fs>.
  <l_fs> = i_objtype.
  ASSIGN COMPONENT 'CLASS' OF STRUCTURE <ls_io> TO <l_fs>.
  <l_fs> = i_class.
  ASSIGN COMPONENT 'OBJID' OF STRUCTURE <ls_io> TO <l_fs>.
  <l_fs> = i_objid.

  CALL FUNCTION 'SKWF_IO_FROM_RELATIONS_GET'
    EXPORTING
      io           = <ls_io>
    IMPORTING
      error        = <ls_error>
    TABLES
      class_filter = lt_class_filter
      relations    = lt_relation.
  CHECK <ls_error> IS INITIAL.

  LOOP AT lt_relation ASSIGNING <ls_relation>.
    CLEAR <ls_error>.
    ASSIGN COMPONENT 'OBJTYPE' OF STRUCTURE <ls_phio> TO <l_fs>.
    <l_fs> = <ls_relation>-objtype.
    ASSIGN COMPONENT 'CLASS' OF STRUCTURE <ls_phio> TO <l_fs>.
    <l_fs> = <ls_relation>-prtn_class.
    ASSIGN COMPONENT 'OBJID' OF STRUCTURE <ls_phio> TO <l_fs>.
    <l_fs> = <ls_relation>-prtn_id.
    CALL FUNCTION 'SKWF_PHIO_LOAD_CONTENT'
      EXPORTING
        phio                = <ls_phio>
      IMPORTING
        error               = <ls_error>
      TABLES
        file_access_info    = lt_file_info
        file_content_ascii  = ct_content_ascii
        file_content_binary = ct_content_binary.
    LOOP AT lt_file_info ASSIGNING <ls_file_info>.
      c_filesize = <ls_file_info>-file_size.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "get_mime_content


*-----------------------------------------------------------------------
* o2_get_mimes
*-----------------------------------------------------------------------
FORM o2_get_mimes
  USING value(i_folder_name)
  CHANGING ct_mime TYPE it_mime.

  DATA:
  l_folder_name1(4096) TYPE c,
  l_folder_name2(4096) TYPE c,
  ls_folder TYPE st_skwf_io,
  ls_error TYPE st_skwf_error,
  ls_parent TYPE st_skwf_io,
  lt_io TYPE it_skwf_io,
  ls_io TYPE st_skwf_io,
  l_prefix(4096) TYPE c,
  l_len TYPE i,
  ls_mime TYPE st_mime,
  l_url(4096) TYPE c,
  l_rel_url(64) TYPE c,
  l_filename(255) TYPE c,
  l_url_prefix TYPE seovalue.

  REFRESH ct_mime.

  PERFORM get_class_attribute_value
    USING
      'CL_WB_MIME_REPOSITORY'
      'MR_URL_PREFIX'
    CHANGING
      l_url_prefix.
  IF l_url_prefix IS INITIAL.
    l_url_prefix = '/'.
  ENDIF.

  CONCATENATE l_url_prefix 'SAP' INTO l_url.
  CALL FUNCTION 'SKWF_NMSPC_IO_FIND_BY_ADDRESS'
    EXPORTING
      url   = l_url
      appl  = 'MIME'
    IMPORTING
      io    = ls_parent
      error = ls_error.
  IF NOT ls_parent IS INITIAL.
    l_folder_name1 = i_folder_name.
    DO.
      IF l_folder_name1 CS '/'.
        SPLIT l_folder_name1 AT '/' INTO l_folder_name2 l_folder_name1.
      ELSE.
        l_folder_name2 = l_folder_name1.
      ENDIF.
      CALL FUNCTION 'SKWF_NMSPC_IO_FIND_BY_ADDRESS'
        EXPORTING
          url    = l_folder_name2
          folder = ls_parent
        IMPORTING
          io     = ls_folder
          error  = ls_error.
      IF ls_folder IS INITIAL
      OR l_folder_name2 = l_folder_name1.
        EXIT.
      ENDIF.
      ls_parent = ls_folder.
    ENDDO.
    IF NOT ls_folder IS INITIAL.
      CALL FUNCTION 'SKWF_FOLDER_SUB_IOS_GET'
        EXPORTING
          folder  = ls_folder
          io_type = 'L'
        IMPORTING
          error   = ls_error
        TABLES
          ios     = lt_io.
      IF ls_error IS INITIAL.
        CONCATENATE l_url_prefix 'SAP/' i_folder_name '/'
            INTO l_prefix.
        l_len = strlen( l_prefix ).
        LOOP AT lt_io INTO ls_io.
          CLEAR ls_mime.
          CALL FUNCTION 'SKWF_NMSPC_IO_ADDRESS_GET'
            EXPORTING
              io           = ls_io
            IMPORTING
              url          = l_url
              relative_url = l_rel_url
              error        = ls_error.
          IF ls_error IS INITIAL.
*           Shave off prefix of URL
            SHIFT l_url BY l_len PLACES.
            ls_mime-key = l_url.
            TRANSLATE ls_mime-key TO UPPER CASE.
            ls_mime-name = l_url.
            ls_mime-objtype = ls_io-objtype.
            ls_mime-class = ls_io-class.
            ls_mime-objid = ls_io-objid.
            l_filename = l_rel_url.
*           Get MIME type from filename
            CALL FUNCTION 'SKWF_MIMETYPE_OF_FILE_GET'
              EXPORTING
                filename = l_filename
              IMPORTING
                mimetype = ls_mime-mimetype.
*           Get MIME type description
            IF NOT ls_mime-mimetype IS INITIAL.
              CALL FUNCTION 'SKWF_MIMETYPE_DESCRIPTION_GET'
                EXPORTING
                  mimetype = ls_mime-mimetype
                  language = sy-langu
                IMPORTING
                  descript = ls_mime-mimetype_descript.
            ENDIF.
            IF NOT ls_mime IS INITIAL.
              APPEND ls_mime TO ct_mime.
            ENDIF.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDIF.
  ENDIF.
  SORT ct_mime BY key.
ENDFORM.                    "get_mimes


*-----------------------------------------------------------------------
* o2_get_url
*-----------------------------------------------------------------------
FORM o2_get_url
  USING
    value(i_https) TYPE flag
    value(i_applname)                                       "char30
    value(i_pagekey)                                        "char70
    value(i_pagename)                                       "char70
    value(i_pagetype) TYPE c
    value(i_is_error_page) TYPE flag
  CHANGING
    c_url TYPE string.

  DATA:
  lo_page TYPE REF TO data.

  FIELD-SYMBOLS:
  <ls_page> TYPE ANY,
  <l_fs> TYPE ANY.

  CREATE DATA lo_page TYPE ('O2PAGENAME').
  ASSIGN lo_page->* TO <ls_page>.

  ASSIGN COMPONENT 'APPLNAME' OF STRUCTURE <ls_page> TO <l_fs>.
  <l_fs> = i_applname.
  ASSIGN COMPONENT 'PAGEKEY' OF STRUCTURE <ls_page> TO <l_fs>.
  <l_fs> = i_pagekey.
  ASSIGN COMPONENT 'PAGENAME' OF STRUCTURE <ls_page> TO <l_fs>.
  <l_fs> = i_pagename.
  ASSIGN COMPONENT 'PAGETYPE' OF STRUCTURE <ls_page> TO <l_fs>.
  <l_fs> = i_pagetype.
  ASSIGN COMPONENT 'IS_ERROR_PAGE' OF STRUCTURE <ls_page> TO <l_fs>.
  <l_fs> = i_is_error_page.

  CALL METHOD ('CL_O2_HELPER')=>generate_url_for_page
    EXPORTING
      p_page        = <ls_page>
      p_secure_http = i_https
    IMPORTING
      p_url         = c_url
    EXCEPTIONS
      OTHERS        = 1.

ENDFORM.                    "get_url


*-----------------------------------------------------------------------
* o2_r3tr_wapa                                  BSP Application
*-----------------------------------------------------------------------
FORM o2_r3tr_wapa.

  DATA:
  lt_tabstrip TYPE it_tabstrip,
  lt_html TYPE it_string,
  ls_attributes TYPE st_attributes,
  lo_appl TYPE REF TO data,
  lo_applt TYPE REF TO data,
  l_applname(30) TYPE c,
  l_applext(30) TYPE c,
  l_bname TYPE xubname,
  l_name_text TYPE ad_namtext,
  ls_o2navigation TYPE st_o2navigation,
  lt_o2navigation TYPE it_o2navigation,
  lo_navgraph TYPE REF TO data,
  l_pagekey(70) TYPE c,
  l_flag TYPE flag.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_appl> TYPE ANY,
  <ls_applt> TYPE ANY,
  <l_fs> TYPE ANY,
  <ls_navgraph> TYPE ANY,
  <ls_tabstrip> TYPE st_tabstrip.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'WAPA'
      AND o2pagekey = space
      AND downloaded = abap_false.
    <ls_ztadir>-downloaded = abap_true.

    IF NOT <ls_navgraph> IS ASSIGNED.
      PERFORM get_tabstrip
      USING 'O2_R3TR_WAPA' space
      CHANGING lt_tabstrip.

      CREATE DATA lo_navgraph TYPE ('O2NAVGRAPH').
      ASSIGN lo_navgraph->* TO <ls_navgraph>.

      CREATE DATA lo_appl TYPE ('O2APPL').
      ASSIGN lo_appl->* TO <ls_appl>.

      CREATE DATA lo_applt TYPE ('O2APPLT').
      ASSIGN lo_applt->* TO <ls_applt>.
    ENDIF.

    REFRESH:
    lt_html,
    lt_o2navigation.

    CLEAR:
    ls_attributes,
    l_applname,
    l_applext,
    <ls_appl>,
    <ls_applt>.

*Properties
    l_applname = <ls_ztadir>-obj_name.
    SELECT SINGLE * FROM ('O2APPL') INTO <ls_appl>
        WHERE applname = l_applname
        AND version = 'A'.
    IF sy-subrc = 0.
      ASSIGN COMPONENT 'APPLEXT' OF STRUCTURE <ls_appl> TO <l_fs>.
      l_applext = <l_fs>.

      ls_attributes-space_after_descript = abap_true.
      ls_attributes-is_bsp_appl = abap_true.

      ls_attributes-descript = <ls_ztadir>-descript.
      ASSIGN COMPONENT 'AUTHOR' OF STRUCTURE <ls_appl> TO <l_fs>.
      ls_attributes-author = <l_fs>.
      l_bname = <l_fs>.
      PERFORM get_user
        USING l_bname
        CHANGING l_name_text.
      ls_attributes-author_text = l_name_text.
      ASSIGN COMPONENT 'CREATEDON' OF STRUCTURE <ls_appl> TO <l_fs>.
      PERFORM get_date
        USING <l_fs>
        CHANGING ls_attributes-date_created.
      ASSIGN COMPONENT 'CHANGEDBY' OF STRUCTURE <ls_appl> TO <l_fs>.
      ls_attributes-bname = <l_fs>.
      l_bname = <l_fs>.
      PERFORM get_user
        USING l_bname
        CHANGING l_name_text.
      ls_attributes-name_text = l_name_text.
      ASSIGN COMPONENT 'CHANGEDON' OF STRUCTURE <ls_appl> TO <l_fs>.
      PERFORM get_date
        USING <l_fs>
        CHANGING ls_attributes-date_last_changed.
      ls_attributes-devclass = <ls_ztadir>-devclass.
      PERFORM get_devclass
        USING <ls_ztadir>-devclass
        CHANGING ls_attributes-devclass_descr.
      PERFORM get_spras
        USING
          <ls_ztadir>-masterlang
        CHANGING
          ls_attributes-laiso
          ls_attributes-sptxt.
      ASSIGN COMPONENT 'APPLNAME' OF STRUCTURE <ls_appl> TO <l_fs>.
      ls_attributes-internal_name = <l_fs>.
      ASSIGN COMPONENT 'STARTPAGE' OF STRUCTURE <ls_appl> TO <l_fs>.
      ls_attributes-initial_bsp = <l_fs>.
      ASSIGN COMPONENT 'APPLCLAS' OF STRUCTURE <ls_appl> TO <l_fs>.
      ls_attributes-application_class = <l_fs>.
      ASSIGN COMPONENT 'THEME' OF STRUCTURE <ls_appl> TO <l_fs>.
      ls_attributes-initial_bsp = <l_fs>.
      ASSIGN COMPONENT 'STATEFUL' OF STRUCTURE <ls_appl> TO <l_fs>.
      ls_attributes-stateful = <l_fs>.
      ASSIGN COMPONENT 'SESSIONMANAGEMNT' OF STRUCTURE <ls_appl>
          TO <l_fs>.
      ls_attributes-supports_portal_integration = <l_fs>.
    ENDIF.

*Navigation
    SELECT * FROM ('O2NAVGRAPH') INTO <ls_navgraph>
        WHERE applname = l_applname
        AND version = 'A'.
      CLEAR ls_o2navigation.
* * * Navigation Request
      ASSIGN COMPONENT 'NODEEXIT' OF STRUCTURE <ls_navgraph>
          TO <l_fs>.
      ls_o2navigation-navrequest = <l_fs>.
* * * Start
      ASSIGN COMPONENT 'CURRNODE' OF STRUCTURE <ls_navgraph>
          TO <l_fs>.
      SELECT SINGLE pagekey FROM ('O2NAVMAP') INTO l_pagekey
          WHERE applname = l_applname
          AND version = 'A'
          AND node = <l_fs>.
      IF sy-subrc = 0.
        SELECT SINGLE pagename FROM ('O2PAGDIR')
            INTO ls_o2navigation-start
            WHERE applname = l_applname
            AND pagekey = l_pagekey.
      ENDIF.
* * * Target
      ASSIGN COMPONENT 'FUPNODE' OF STRUCTURE <ls_navgraph>
          TO <l_fs>.
      SELECT SINGLE pagekey FROM ('O2NAVMAP') INTO l_pagekey
          WHERE applname = l_applname
          AND version = 'A'
          AND node = <l_fs>.
      IF sy-subrc = 0.
        SELECT SINGLE pagename FROM ('O2PAGDIR')
            INTO ls_o2navigation-target
            WHERE applname = l_applname
            AND pagekey = l_pagekey.
      ENDIF.
* * *
      APPEND ls_o2navigation TO lt_o2navigation.
    ENDSELECT.
*** TabStrip
    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'NAVIGATION'.
          IF lt_o2navigation IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
      ENDCASE.
    ENDLOOP.
*HTML
    PERFORM html_main_header
      USING
        tpt_o2_wapa
        txt_bsp_application
        l_applext
        txt_active___1
        space
        space
        space
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
    l_flag = abap_false.
    IF lt_o2navigation IS INITIAL.
      l_flag = abap_true.
    ENDIF.
    PERFORM html_add_attributes_2
      USING
        ls_attributes
        'PROPERTIES'
        l_flag
      CHANGING
        lt_html.
    IF NOT lt_o2navigation IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'WAPA_NAVI'
          lt_o2navigation
          lt_o2navigation
          'NAVIGATION'
          abap_true
        CHANGING
          lt_html.
    ENDIF.
    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_wapa


*-----------------------------------------------------------------------
* o2_r3tr_wapa_appl                             BSP Applications
*-----------------------------------------------------------------------
FORM o2_r3tr_wapa_appl.

  DATA:
  mt_string TYPE it_string.

  TYPES:
  BEGIN OF st_o2pagevhs,
    applname(30) TYPE c,
    pagekey(70) TYPE c,
    evhandler(30) TYPE c,
    version TYPE c,
    evhname(30) TYPE c,
    source LIKE mt_string,
  END OF st_o2pagevhs,
  it_o2pagevhs TYPE SORTED TABLE OF st_o2pagevhs
    WITH UNIQUE KEY evhandler.

  DATA:
  lt_html TYPE it_string,
  l_objname(110) TYPE c,
  l_applname(30) TYPE c,
  l_pagekey(70) TYPE c,
  l_pagename(70) TYPE c,
  l_pagetype(1) TYPE c,
  l_is_error_page TYPE flag,
  l_https TYPE flag,
  lo_pagdir TYPE REF TO data,
  ls_ti TYPE st_textinput,
  ls_rb TYPE st_access,
  lt_prop_header TYPE it_textinput,
  lt_prop_page_type_rb TYPE it_access,
  lt_prop_page_type_ti TYPE it_textinput,
  lt_prop_error_handling TYPE it_textinput,
  lt_prop_status_rb TYPE it_access,
  lt_prop_status_ti TYPE it_textinput,
  lt_prop_caching_li TYPE it_textinput,
  lt_prop_caching_re TYPE it_textinput,
  lt_prop_transfer_options_li TYPE it_textinput,
  lt_prop_transfer_options_re TYPE it_textinput,
  lt_prop_footer TYPE it_textinput,
  lt_dom_value TYPE it_dom_value,
  l_bname TYPE xubname,
  l_name TYPE ad_namtext,
  lt_line TYPE it_line,
  lt_layout_src TYPE it_string,
  l_str TYPE string,
  lt_o2pagevhs TYPE it_o2pagevhs,
  lt_o2pagpars TYPE it_o2pagpars,
  lt_typesrc TYPE it_string,
  lt_used_guid TYPE it_guid,
  lt_tabstrip TYPE it_tabstrip,
  l_o2type TYPE c,
  l_type(4) TYPE c,
  l_filename TYPE string,
  l_filename2 TYPE string,
  lt_pageattr TYPE it_o2pageattr,
  ls_pageattr TYPE st_o2pageattr,
  l_flag TYPE flag,
  ls_tabstrip TYPE st_tabstrip,
  l_type_title TYPE string,
  l_title TYPE string,
  l_id TYPE string,
  l_javascript TYPE string.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_pagdir> TYPE ANY,
  <ls_line> TYPE st_line,
  <l_fs> TYPE ANY,
  <ls_dom_value> TYPE st_dom_value,
  <ls_o2pagevhs> TYPE st_o2pagevhs,
  <ls_o2pagpars> TYPE st_o2pagpars,
  <ls_tabstrip> TYPE st_tabstrip.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'WAPA'
      AND o2pagekey <> space
      AND (
        o2type = gc_o2type_bsp
        OR o2type = gc_o2type_ctrl
        OR o2type = gc_o2type_incl
        OR o2type = gc_o2type_view
      )
      AND downloaded = abap_false.
    <ls_ztadir>-downloaded = abap_true.

    IF NOT <ls_pagdir> IS ASSIGNED.
      CREATE DATA lo_pagdir TYPE ('O2PAGATTR').
      ASSIGN lo_pagdir->* TO <ls_pagdir>.
    ENDIF.

    REFRESH:
    lt_html,
    lt_prop_header,
    lt_prop_page_type_rb,
    lt_prop_page_type_ti,
    lt_prop_error_handling,
    lt_prop_status_rb,
    lt_prop_status_ti,
    lt_prop_caching_li,
    lt_prop_caching_re,
    lt_prop_transfer_options_li,
    lt_prop_transfer_options_re,
    lt_prop_footer,
    lt_layout_src,
    lt_o2pagevhs,
    lt_o2pagpars,
    lt_typesrc,
    lt_used_guid,
    lt_tabstrip,
    lt_pageattr.

    CLEAR:
    l_objname,
    l_o2type,
    <ls_pagdir>,
    l_type,
    l_filename,
    l_filename2,
    l_flag,
    l_type_title,
    l_title,
    l_id,
    l_javascript.

    l_applname = <ls_ztadir>-obj_name.
    l_pagekey = <ls_ztadir>-o2pagekey.
    l_objname+0(30) = <ls_ztadir>-obj_name.
    l_objname+30(70) = <ls_ztadir>-o2pagekey.

    CALL FUNCTION 'O2_GET_WAPA_SOURCEN'
      EXPORTING
        p_objname       = l_objname
        p_versno        = 0
        p_devclass      = <ls_ztadir>-devclass
        p_langu         = sy-langu
        p_master_l      = sy-langu
      IMPORTING
        pt_page_content = lt_line
        pt_ev_handler   = lt_o2pagevhs
        pt_parameters   = lt_o2pagpars
        ps_page_attr    = <ls_pagdir>
        pt_typesource   = lt_typesrc
        pt_used_guids   = lt_used_guid
      EXCEPTIONS
        OTHERS          = 1.

    ASSIGN COMPONENT 'PAGENAME' OF STRUCTURE <ls_pagdir> TO <l_fs>.
    l_pagename = <l_fs>.

* Properties - Header
*   Description
    CLEAR ls_ti.
    ls_ti-name = txt_description.
    ls_ti-value = <ls_ztadir>-descript.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_prop_header.
*
    IF <ls_ztadir>-o2type = gc_o2type_ctrl.
*     Controller Class
      CLEAR ls_ti.
      ls_ti-name = txt_controller_class.
      ASSIGN COMPONENT 'IMPLCLASS' OF STRUCTURE <ls_pagdir> TO <l_fs>.
      ls_ti-value = <l_fs>.
      ls_ti-input = abap_true.
      APPEND ls_ti TO lt_prop_header.
    ENDIF.
*
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_view.
*     Mime Type
      CLEAR ls_ti.
      ls_ti-name = txt_mime_type.
      ASSIGN COMPONENT 'MIMETYPE' OF STRUCTURE <ls_pagdir> TO <l_fs>.
      ls_ti-value = <l_fs>.
      IF ls_ti-value IS INITIAL.
        ls_ti-value = 'application/octet-stream'.
      ENDIF.
      ls_ti-input = abap_true.
      APPEND ls_ti TO lt_prop_header.
*     Compression
      CLEAR ls_ti.
      ls_ti-name = txt_compression.
      ASSIGN COMPONENT 'STRIPMODE' OF STRUCTURE <ls_pagdir>
          TO <l_fs>.
      PERFORM get_dom_value_text
        USING 'O2STRIPMODE' <l_fs>
        CHANGING ls_ti-value.
      ls_ti-input = abap_true.
      APPEND ls_ti TO lt_prop_header.
*     W/O Script Code
      CLEAR ls_ti.
      ls_ti-name = txt_wo_script_code.
      ASSIGN COMPONENT 'NO_SCRIPT' OF STRUCTURE <ls_pagdir> TO <l_fs>.
      ls_ti-value = <l_fs>.
      ls_ti-flag = abap_true.
      APPEND ls_ti TO lt_prop_header.
    ENDIF.
*
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_incl
    OR <ls_ztadir>-o2type = gc_o2type_view.
* Properties - Page Type
      ASSIGN COMPONENT 'PAGETYPE' OF STRUCTURE <ls_pagdir> TO <l_fs>.
      l_pagetype = <l_fs>.
*     View
      CLEAR ls_rb.
      ls_rb-ddtext = txt_view.
      IF l_pagetype = gc_o2type_view.
        ls_rb-checked = abap_true.
      ENDIF.
      APPEND ls_rb TO lt_prop_page_type_rb.
*     Page with Flow Logic
      CLEAR ls_rb.
      ls_rb-ddtext = txt_page_with_flow_logic.
      IF l_pagetype = gc_o2type_bsp.
        ls_rb-checked = abap_true.
      ENDIF.
      APPEND ls_rb TO lt_prop_page_type_rb.
*     Page Fragment
      CLEAR ls_rb.
      ls_rb-ddtext = txt_page_fragment.
      IF l_pagetype = gc_o2type_incl.
        ls_rb-checked = abap_true.
      ENDIF.
      APPEND ls_rb TO lt_prop_page_type_rb.
*     Controller class
      CLEAR ls_ti.
      ls_ti-name = txt_controller_class.
      ASSIGN COMPONENT 'CONTROLLERURL' OF STRUCTURE <ls_pagdir>
          TO <l_fs>.
      ls_ti-value = <l_fs>.
      ls_ti-input = abap_true.
      APPEND ls_ti TO lt_prop_page_type_ti.
    ENDIF.
*
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_ctrl
    OR <ls_ztadir>-o2type = gc_o2type_view.
* Properties - Error Handling
*     Is Error Page
      CLEAR ls_ti.
      ls_ti-name = txt_is_error_page.
      ASSIGN COMPONENT 'IS_ERROR_PAGE' OF STRUCTURE <ls_pagdir>
          TO <l_fs>.
      l_is_error_page = <l_fs>.
      ls_ti-value = l_is_error_page.
      ls_ti-flag = abap_true.
      APPEND ls_ti TO lt_prop_error_handling.
*     Assigned Error Page
      CLEAR ls_ti.
      ls_ti-name = txt_assigned_error_page.
      ASSIGN COMPONENT 'ERROR_PAGE' OF STRUCTURE <ls_pagdir>
          TO <l_fs>.
      ls_ti-value = <l_fs>.
      ls_ti-input = abap_true.
      APPEND ls_ti TO lt_prop_error_handling.
    ENDIF.
*
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_ctrl.
* Properties - Status
      PERFORM get_dom_value_texts
        USING 'O2PAGSTATE'
        CHANGING lt_dom_value.
      SORT lt_dom_value BY value.
      ASSIGN COMPONENT 'STATE' OF STRUCTURE <ls_pagdir> TO <l_fs>.
      LOOP AT lt_dom_value ASSIGNING <ls_dom_value>.
        CLEAR ls_rb.
        ls_rb-ddtext = <ls_dom_value>-text.
        IF <ls_dom_value>-value = <l_fs>.
          ls_rb-checked = abap_true.
        ENDIF.
        APPEND ls_rb TO lt_prop_status_rb.
      ENDLOOP.
*     Lifetime
      CLEAR ls_ti.
      ls_ti-name = txt_lifetime.
      ASSIGN COMPONENT 'LIFETIME' OF STRUCTURE <ls_pagdir> TO <l_fs>.
      PERFORM get_dom_value_text
        USING 'O2LIFETIME' <l_fs>
        CHANGING ls_ti-value.
      ls_ti-input = abap_true.
      APPEND ls_ti TO lt_prop_status_ti.
* Properties - Caching
*     Browser Cache
      CLEAR ls_ti.
      ls_ti-name = txt_browser_cache.
      ASSIGN COMPONENT 'BROWSER_CACHE' OF STRUCTURE <ls_pagdir>
          TO <l_fs>.
      ls_ti-value = <l_fs>.
      ls_ti-input = abap_true.
      ls_ti-description = txt_sec.
      APPEND ls_ti TO lt_prop_caching_li.
*     Server Cache
      CLEAR ls_ti.
      ls_ti-name = txt_server_cache.
      ASSIGN COMPONENT 'SERVER_CACHE' OF STRUCTURE <ls_pagdir>
          TO <l_fs>.
      ls_ti-value = <l_fs>.
      ls_ti-input = abap_true.
      ls_ti-description = txt_sec.
      APPEND ls_ti TO lt_prop_caching_li.
*
      CLEAR ls_ti.
      ls_ti-space = abap_true.
      APPEND ls_ti TO lt_prop_caching_re.
*     Browser-Specific
      CLEAR ls_ti.
      ls_ti-name = txt_browser_specific.
      ASSIGN COMPONENT 'BROWSER_DEP' OF STRUCTURE <ls_pagdir>
          TO <l_fs>.
      ls_ti-value = <l_fs>.
      ls_ti-flag = abap_true.
      APPEND ls_ti TO lt_prop_caching_re.
* Properties - Transfer Options
*     Compression
      CLEAR ls_ti.
      ls_ti-name = txt_compression.
      ASSIGN COMPONENT 'COMPRESSION' OF STRUCTURE <ls_pagdir>
          TO <l_fs>.
      ls_ti-value = <l_fs>.
      ls_ti-flag = abap_true.
      APPEND ls_ti TO lt_prop_transfer_options_li.
    ENDIF.
*
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_ctrl
    OR <ls_ztadir>-o2type = gc_o2type_view.
*     Delta Handling
      CLEAR ls_ti.
      ls_ti-name = txt_delta_handling.
      ASSIGN COMPONENT 'DELTA_HANDLING' OF STRUCTURE <ls_pagdir>
          TO <l_fs>.
      ls_ti-value = <l_fs>.
      ls_ti-flag = abap_true.
      APPEND ls_ti TO lt_prop_transfer_options_li.
    ENDIF.
*
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_ctrl.
*     HTTPS
      CLEAR ls_ti.
      ls_ti-name = txt_https.
      ASSIGN COMPONENT 'SECUREHTTP' OF STRUCTURE <ls_pagdir>
          TO <l_fs>.
      l_https = <l_fs>.
      ls_ti-value = l_https.
      ls_ti-flag = abap_true.
      APPEND ls_ti TO lt_prop_transfer_options_re.
    ENDIF.
* Properties - Footer
*   Created on
    CLEAR ls_ti.
    ls_ti-name = txt_created_on.
    ASSIGN COMPONENT 'AUTHOR' OF STRUCTURE <ls_pagdir> TO <l_fs>.
    l_bname = <l_fs>.
    PERFORM get_user
      USING l_bname
      CHANGING l_name.
    ls_ti-value = l_bname.
    ls_ti-value_text = l_name.
    ASSIGN COMPONENT 'CREATEDON' OF STRUCTURE <ls_pagdir> TO <l_fs>.
    PERFORM get_date
      USING <l_fs>
      CHANGING ls_ti-value_ext.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_prop_footer.
*   Last Changed on
    CLEAR ls_ti.
    ls_ti-name = txt_last_changed_on.
    ASSIGN COMPONENT 'CHANGEDBY' OF STRUCTURE <ls_pagdir> TO <l_fs>.
    l_bname = <l_fs>.
    PERFORM get_user
      USING l_bname
      CHANGING l_name.
    ls_ti-value = l_bname.
    ls_ti-value_text = l_name.
    ASSIGN COMPONENT 'CHANGEDON' OF STRUCTURE <ls_pagdir> TO <l_fs>.
    PERFORM get_date
      USING <l_fs>
      CHANGING ls_ti-value_ext.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_prop_footer.
*   Package
    CLEAR ls_ti.
    ls_ti-name = txt_package.
    ls_ti-value = <ls_ztadir>-devclass.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_prop_footer.
*
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_ctrl.
*     URL
      CLEAR ls_ti.
      ls_ti-name = txt_url.
      PERFORM o2_get_url
        USING
          l_https
          l_applname
          l_pagekey
          l_pagename
          l_pagetype
          l_is_error_page
        CHANGING
          ls_ti-value.
      ls_ti-input = abap_true.
      APPEND ls_ti TO lt_prop_footer.
    ENDIF.

* Layout
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_incl
    OR <ls_ztadir>-o2type = gc_o2type_view.
      LOOP AT lt_line ASSIGNING <ls_line>.
        l_str = <ls_line>-line.
        APPEND l_str TO lt_layout_src.
      ENDLOOP.
    ENDIF.

* Page Attributes
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_view.
      LOOP AT lt_o2pagpars ASSIGNING <ls_o2pagpars>.
        CLEAR ls_pageattr.
        MOVE-CORRESPONDING <ls_o2pagpars> TO ls_pageattr.
        PERFORM get_dom_value_text
          USING
            'O2TYPTYPE'
            ls_pageattr-typtype
          CHANGING
            ls_pageattr-typtype_txt.
        IF ls_pageattr-pardecltyp = '0'.
          ls_pageattr-pardecltyp_flag = abap_true.
        ENDIF.
        APPEND ls_pageattr TO lt_pageattr.
      ENDLOOP.
    ENDIF.

    l_o2type = <ls_ztadir>-o2type.
    IF l_o2type IS INITIAL.
      l_o2type = 'B'.
    ENDIF.
    PERFORM get_tabstrip
      USING 'O2_R3TR_WAPA_APPL' l_o2type
      CHANGING lt_tabstrip.
    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'LAYOUT'.
          IF lt_layout_src IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ELSE.
            CONCATENATE l_javascript 'makeDivSize(''LAYOUT'');'
                INTO l_javascript.
          ENDIF.
        WHEN 'EVENT_HANDLER'.
          IF lt_o2pagevhs IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'PAGE_ATTRIBUTES'.
          IF lt_pageattr IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'TYPE_DEFINITIONS'.
          IF lt_typesrc IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ELSE.
            CONCATENATE l_javascript
                'makeDivSize(''TYPE_DEFINITIONS'');'
                INTO l_javascript.
          ENDIF.
      ENDCASE.
    ENDLOOP.
    LOOP AT lt_o2pagevhs ASSIGNING <ls_o2pagevhs>.
      CLEAR ls_tabstrip.
      ls_tabstrip-form = 'O2_R3TR_WAPA_APPL'.
      ls_tabstrip-id = <ls_o2pagevhs>-evhandler.
      ls_tabstrip-parent_id = 'EVENT_HANDLER'.
      ls_tabstrip-text = <ls_o2pagevhs>-evhname.
      IF sy-tabix = 1.
        ls_tabstrip-active = abap_true.
      ENDIF.
      ls_tabstrip-tab_nr = sy-tabix + 20.
      APPEND ls_tabstrip TO lt_tabstrip.
      CONCATENATE l_javascript
          'makeDivSize(''' <ls_o2pagevhs>-evhandler ''');'
          INTO l_javascript.
    ENDLOOP.

*Filename
    CASE <ls_ztadir>-o2type.
      WHEN gc_o2type_ctrl.
        l_type = 'ctrl'.
        l_title = tpt_o2_wapa_ctrl.
        l_type_title = txt_controller.
      WHEN gc_o2type_view.
        l_type = 'view'.
        l_title = tpt_o2_wapa_page.
        l_type_title = txt_page.
      WHEN gc_o2type_bsp.
        l_type = 'bsp'.
        l_title = tpt_o2_wapa_page.
        l_type_title = txt_page.
      WHEN gc_o2type_incl.
        l_type = 'incl'.
        l_title = tpt_o2_wapa_page.
        l_type_title = txt_page.
    ENDCASE.
    PERFORM replace_single
      USING '#NAME_VALUE#' <ls_ztadir>-obj_name
      CHANGING l_title.
    CONCATENATE <ls_ztadir>-obj_name '-' l_type
        '/' <ls_ztadir>-o2pagename
        INTO l_filename.

*HTML
    PERFORM html_main_header
      USING
        l_title
        l_type_title
        <ls_ztadir>-o2pagename
        txt_active___1
        space
        space
        l_javascript
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*Properties
    l_flag = abap_true.
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_incl
    OR <ls_ztadir>-o2type = gc_o2type_view.
      IF NOT lt_layout_src IS INITIAL
      OR g_empty_tab = gc_empty_tab_display.
        l_flag = abap_false.
      ENDIF.
    ENDIF.
    PERFORM html_add_properties_o2
      USING
        lt_prop_header
        txt_page_type
        lt_prop_page_type_rb
        lt_prop_page_type_ti
        txt_error_handling
        lt_prop_error_handling
        txt_status
        lt_prop_status_rb
        lt_prop_status_ti
        txt_caching
        lt_prop_caching_li
        lt_prop_caching_re
        txt_transfer_options
        lt_prop_transfer_options_li
        lt_prop_transfer_options_re
        lt_prop_footer
        'PROPERTIES'
        l_flag
      CHANGING
        lt_html.
*Layout
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_incl
    OR <ls_ztadir>-o2type = gc_o2type_view.
      IF NOT lt_layout_src IS INITIAL
      OR g_empty_tab = gc_empty_tab_display.
        PERFORM html_add_sourcecode
          USING
            lt_layout_src
            l_filename
            space
            space
            gc_extension_txt
            'LAYOUT'
            abap_true
          CHANGING
            lt_html.
        PERFORM download
          USING
            lt_layout_src
            <ls_ztadir>-pgmid
            <ls_ztadir>-object
            l_filename
            gc_extension_txt
            abap_false.
      ENDIF.
    ENDIF.
*Event Handler
    IF <ls_ztadir>-o2type = gc_o2type_bsp.
      IF NOT lt_o2pagevhs IS INITIAL
      OR g_empty_tab = gc_empty_tab_display.
        PERFORM html_add_container_begin
          USING
            lt_tabstrip
            'EVENT_HANDLER'
            abap_false
          CHANGING
            lt_html.
*
        LOOP AT lt_o2pagevhs ASSIGNING <ls_o2pagevhs>.
          l_flag = abap_false.
          IF sy-tabix = 1.
            l_flag = abap_true.
          ENDIF.
          CONCATENATE l_filename '.' <ls_o2pagevhs>-evhandler
              INTO l_filename2.
          PERFORM html_add_sourcecode
            USING
              <ls_o2pagevhs>-source
              l_filename2
              space
              space
              gc_extension_txt
              <ls_o2pagevhs>-evhandler
              l_flag
            CHANGING
              lt_html.
          PERFORM download
            USING
              <ls_o2pagevhs>-source
              <ls_ztadir>-pgmid
              <ls_ztadir>-object
              l_filename2
              gc_extension_txt
              abap_false.
        ENDLOOP.
*
        PERFORM html_add_container_end
          CHANGING
            lt_html.
      ENDIF.
    ENDIF.
*Page Attributes
    IF <ls_ztadir>-o2type = gc_o2type_bsp
    OR <ls_ztadir>-o2type = gc_o2type_view.
      IF NOT lt_pageattr IS INITIAL
      OR g_empty_tab = gc_empty_tab_display.
        PERFORM get_id
          USING 'WAPA_ATTR|' l_o2type
          CHANGING l_id.
        PERFORM html_add_table
          USING
            l_id
            lt_pageattr
            lt_pageattr
            'PAGE_ATTRIBUTES'
            abap_false
          CHANGING
            lt_html.
      ENDIF.
    ENDIF.
*Type Definitions
    IF <ls_ztadir>-o2type = gc_o2type_bsp.
      IF NOT lt_typesrc IS INITIAL
      OR g_empty_tab = gc_empty_tab_display.
        CONCATENATE l_filename '.types' INTO l_filename2.
        PERFORM html_add_sourcecode
          USING
            lt_typesrc
            l_filename2
            space
            space
            gc_extension_txt
            'TYPE_DEFINITIONS'
            abap_false
          CHANGING
            lt_html.
        PERFORM download
          USING
            lt_typesrc
            <ls_ztadir>-pgmid
            <ls_ztadir>-object
            l_filename2
            gc_extension_txt
            abap_false.
      ENDIF.
    ENDIF.
*
    PERFORM html_main_footer
      USING
        lt_html.

    PERFORM download
      USING
        lt_html
        <ls_ztadir>-pgmid
        <ls_ztadir>-object
        l_filename
        gc_extension_htm
        abap_true.
  ENDLOOP.

ENDFORM.                    "r3tr_wapa_appl


*-----------------------------------------------------------------------
* o2_r3tr_wapa_mime                             Mimes
*-----------------------------------------------------------------------
FORM o2_r3tr_wapa_mime.

  DATA:
  lt_content_ascii TYPE it_o2content_ascii,
  lt_content_binary TYPE it_o2content_binary,
  lt_ascii TYPE it_string,
  ls_ascii TYPE string,
  l_filename TYPE string,
  l_filesize TYPE i.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_content_ascii> TYPE st_o2content_ascii.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'WAPA'
      AND o2pagekey <> space
      AND o2type = gc_o2type_mime
      AND downloaded = abap_false.
    <ls_ztadir>-downloaded = abap_true.

    CLEAR:
    l_filesize.

    REFRESH:
    lt_content_ascii,
    lt_content_binary,
    lt_ascii.

    PERFORM o2_get_mime_content
      USING
        <ls_ztadir>-mime_objtype
        <ls_ztadir>-mime_class
        <ls_ztadir>-mime_objid
      CHANGING
        lt_content_ascii
        lt_content_binary
        l_filesize.

    CONCATENATE <ls_ztadir>-obj_name '-mime/'
        <ls_ztadir>-o2pagename
        INTO l_filename.

    IF NOT lt_content_ascii IS INITIAL.
      LOOP AT lt_content_ascii ASSIGNING <ls_content_ascii>.
        ls_ascii = <ls_content_ascii>-line.
        APPEND ls_ascii TO lt_ascii.
      ENDLOOP.

      PERFORM download
        USING
          lt_ascii
          <ls_ztadir>-pgmid
          <ls_ztadir>-object
          l_filename
          space
          abap_true.
    ENDIF.

    IF NOT lt_content_binary IS INITIAL.
      PERFORM download_binary
        USING
          lt_content_binary
          l_filesize
          <ls_ztadir>-pgmid
          <ls_ztadir>-object
          l_filename
          space
          abap_true.
    ENDIF.

  ENDLOOP.

ENDFORM.                    "r3tr_wapa_mime


*-----------------------------------------------------------------------
* o2_r3tr_wtag                                  BSP Extension
*-----------------------------------------------------------------------
FORM o2_r3tr_wtag.

  DATA:
  lt_tabstrip TYPE it_tabstrip,
  lt_html TYPE it_string,
  ls_ti TYPE st_textinput,
  lt_props TYPE it_textinput,
  lt_general TYPE it_textinput,
  lo_taglib TYPE REF TO data,
  l_tlibid(30) TYPE c,
  l_tlibname(30) TYPE c,
  l_masterlang TYPE masterlang,
  l_bname TYPE xubname,
  l_name_text TYPE ad_namtext,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt,
  l_title TYPE string.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_taglib> TYPE ANY,
  <l_fs> TYPE ANY.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'WTAG'
      AND o2pagekey = space
      AND downloaded = abap_false.
    <ls_ztadir>-downloaded = abap_true.

    IF NOT <ls_taglib> IS ASSIGNED.
      PERFORM get_tabstrip
        USING 'O2_R3TR_WTAG' space
        CHANGING lt_tabstrip.

      CREATE DATA lo_taglib TYPE ('O2TAGLIB').
      ASSIGN lo_taglib->* TO <ls_taglib>.
    ENDIF.

    REFRESH:
    lt_html,
    lt_props,
    lt_general.

    CLEAR <ls_taglib>.

    l_tlibid = <ls_ztadir>-obj_name.

    SELECT SINGLE masterlang FROM tadir INTO l_masterlang
        WHERE pgmid = 'R3TR'
        AND object = 'WTAG'
        AND obj_name = <ls_ztadir>-obj_name.

    SELECT SINGLE * FROM ('O2TAGLIB') INTO <ls_taglib>
        WHERE tlibid = l_tlibid
        AND state = 'A'.

    ASSIGN COMPONENT 'TLIBNAME' OF STRUCTURE <ls_taglib> TO <l_fs>.
    l_tlibname = <l_fs>.

*Properties
*   Short Description
    CLEAR ls_ti.
    ls_ti-name = txt_short_description___2.
    ls_ti-value = <ls_ztadir>-descript.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_props.
*   Default Prefix
    CLEAR ls_ti.
    ls_ti-name = txt_default_prefix.
    ASSIGN COMPONENT 'PREFIX' OF STRUCTURE <ls_taglib> TO <l_fs>.
    ls_ti-value = <l_fs>.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_props.
*   BSP Extension Class
    CLEAR ls_ti.
    ls_ti-name = txt_bsp_extension_class.
    ASSIGN COMPONENT 'TAGLIBCLASS' OF STRUCTURE <ls_taglib> TO <l_fs>.
    ls_ti-value = <l_fs>.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_props.
*   BSP Element Basis Class
    CLEAR ls_ti.
    ls_ti-name = txt_bsp_element_basis_class.
    ASSIGN COMPONENT 'TAGBASECLASS' OF STRUCTURE <ls_taglib>
        TO <l_fs>.
    ls_ti-value = <l_fs>.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_props.
*General Data
*   Created by
    CLEAR ls_ti.
    ls_ti-name = txt_created_by___1.
    ASSIGN COMPONENT 'AUTHOR' OF STRUCTURE <ls_taglib> TO <l_fs>.
    ls_ti-value = <l_fs>.
    l_bname = <l_fs>.
    PERFORM get_user
      USING l_bname
      CHANGING l_name_text.
    ls_ti-value_text = l_name_text.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_general.
*   Creation Date
    CLEAR ls_ti.
    ls_ti-name = txt_creation_date.
    ASSIGN COMPONENT 'CREATEDON' OF STRUCTURE <ls_taglib> TO <l_fs>.
    PERFORM get_date
      USING
        <l_fs>
      CHANGING
        ls_ti-value.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_general.
*   Last Changed
    CLEAR ls_ti.
    ls_ti-name = txt_last_changed.
    ASSIGN COMPONENT 'CHANGEDBY' OF STRUCTURE <ls_taglib> TO <l_fs>.
    ls_ti-value = <l_fs>.
    l_bname = <l_fs>.
    PERFORM get_user
      USING l_bname
      CHANGING l_name_text.
    ls_ti-value_text = l_name_text.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_general.
*   Changed On
    CLEAR ls_ti.
    ls_ti-name = txt_changed_on.
    ASSIGN COMPONENT 'CHANGEDON' OF STRUCTURE <ls_taglib> TO <l_fs>.
    PERFORM get_date
      USING
        <l_fs>
      CHANGING
        ls_ti-value.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_general.
*   Time changed
    CLEAR ls_ti.
    ls_ti-name = txt_time_changed.
    ASSIGN COMPONENT 'STAMP' OF STRUCTURE <ls_taglib> TO <l_fs>.
    PERFORM get_time
      USING
        <l_fs>
      CHANGING
        ls_ti-value.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_general.
*   Package
    CLEAR ls_ti.
    ls_ti-name = txt_package.
    ls_ti-value = <ls_ztadir>-devclass.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_general.
*   Original Language
    CLEAR ls_ti.
    ls_ti-name = txt_original_language.
    PERFORM get_spras
      USING l_masterlang
      CHANGING l_laiso l_sptxt.
    ls_ti-value = l_laiso.
    ls_ti-value_text = l_sptxt.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_general.
*Title
    l_title = tpt_o2_wtag.
    PERFORM replace_single
      USING
        var_name_value
        <ls_ztadir>-obj_name
      CHANGING
        l_title.
*HTML
    PERFORM html_main_header
      USING
        l_title
        txt_bsp_extension
        l_tlibname
        txt_active___1
        space
        space
        space
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*Properties
    PERFORM html_add_textinput_subbox
      USING
        lt_props
        txt_general_data
        lt_general
        'PROPERTIES'
        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_wtag


*-----------------------------------------------------------------------
* o2_r3tr_wtag_ext                              BSP Extensions
*-----------------------------------------------------------------------
FORM o2_r3tr_wtag_ext.

  DATA:
  lt_tabstrip TYPE it_tabstrip,
  lt_html TYPE it_string,
  ls_ti TYPE st_textinput,
  lt_props TYPE it_textinput,
  lt_general TYPE it_textinput,
  lt_options TYPE it_textinput,
  ls_rb TYPE st_access,
  lt_content TYPE it_access,
  lo_tag TYPE REF TO data,
  lo_att TYPE REF TO data,
  ls_att TYPE st_o2tagatt,
  lt_att TYPE it_o2tagatt,
  l_tlibid(30) TYPE c,
  l_tagid(30) TYPE c,
  l_masterlang TYPE masterlang,
  l_bname TYPE xubname,
  l_name_text TYPE ad_namtext,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt,
  l_title TYPE string,
  l_filename TYPE string.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_tag> TYPE ANY,
  <ls_att> TYPE ANY,
  <l_fs> TYPE ANY.

  CONSTANTS:
  lc_content_empty      TYPE c VALUE 'E',
  lc_content_inner_tags TYPE c VALUE 'I',
  lc_content_bsp        TYPE c VALUE 'B',
  lc_content_tagdep     TYPE c VALUE 'T'.

  LOOP AT gt_ztadir ASSIGNING <ls_ztadir>
      WHERE pgmid = 'R3TR'
      AND object = 'WTAG'
      AND o2pagekey <> space
      AND downloaded = abap_false.
    <ls_ztadir>-downloaded = abap_true.

    IF NOT <ls_tag> IS ASSIGNED.
      PERFORM get_tabstrip
        USING 'O2_R3TR_WTAG_EXT' space
        CHANGING lt_tabstrip.

      CREATE DATA lo_tag TYPE ('O2TAG').
      ASSIGN lo_tag->* TO <ls_tag>.

      CREATE DATA lo_att TYPE ('O2TAGATT').
      ASSIGN lo_att->* TO <ls_att>.
    ENDIF.

    REFRESH:
    lt_html,
    lt_props,
    lt_general,
    lt_content,
    lt_options,
    lt_att.

    CLEAR:
    <ls_tag>,
    <ls_att>,
    ls_rb,
    ls_att,
    l_filename.

    l_tlibid = <ls_ztadir>-obj_name.
    l_tagid = <ls_ztadir>-o2name.

    SELECT SINGLE * FROM ('O2TAG') INTO <ls_tag>
        WHERE tlibid = l_tlibid
        AND tagid = l_tagid
        AND state = 'A'.

*Properties
*   Short Description
    CLEAR ls_ti.
    ls_ti-name = txt_short_description___2.
    ls_ti-value = <ls_ztadir>-descript.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_props.
*   Element Handler Class
    CLEAR ls_ti.
    ls_ti-name = txt_element_handler_class.
    ASSIGN COMPONENT 'TAGCLASS' OF STRUCTURE <ls_tag> TO <l_fs>.
    ls_ti-value = <l_fs>.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_props.
*   BSP Extension Class
    CLEAR ls_ti.
    ls_ti-name = txt_bsp_extension_class.
    ASSIGN COMPONENT 'GENCLASS' OF STRUCTURE <ls_tag> TO <l_fs>.
    ls_ti-value = <l_fs>.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_props.
*Element: content
    ASSIGN COMPONENT 'BCONTENT' OF STRUCTURE <ls_tag> TO <l_fs>.
*   Blank
    CLEAR ls_rb.
    ls_rb-ddtext = txt_blank.
    IF <l_fs> = lc_content_empty.
      ls_rb-checked = abap_true.
    ENDIF.
    APPEND ls_rb TO lt_content.
*   BSP Elements Only
    CLEAR ls_rb.
    ls_rb-ddtext = txt_bsp_elements_only.
    IF <l_fs> = lc_content_inner_tags.
      ls_rb-checked = abap_true.
    ENDIF.
    APPEND ls_rb TO lt_content.
*   BSP Elements and Static HTML
    CLEAR ls_rb.
    ls_rb-ddtext = txt_bsp_elements_and_static_ht.
    IF <l_fs> = lc_content_bsp.
      ls_rb-checked = abap_true.
    ENDIF.
    APPEND ls_rb TO lt_content.
*   Element Interprets Content Itself
    CLEAR ls_rb.
    ls_rb-ddtext = txt_element_interprets_content.
    IF <l_fs> = lc_content_tagdep.
      ls_rb-checked = abap_true.
    ENDIF.
    APPEND ls_rb TO lt_content.
*Further options
*   User-Defined Validation
    CLEAR ls_ti.
    ls_ti-name = txt_user_defined_validation.
    ASSIGN COMPONENT 'VALIDATION' OF STRUCTURE <ls_tag> TO <l_fs>.
    ls_ti-value = <l_fs>.
    ls_ti-flag = abap_true.
    APPEND ls_ti TO lt_options.
*   Iteration over Element Content
    CLEAR ls_ti.
    ls_ti-name = txt_iteration_over_element_con.
    ASSIGN COMPONENT 'ITERATION' OF STRUCTURE <ls_tag> TO <l_fs>.
    ls_ti-value = <l_fs>.
    ls_ti-flag = abap_true.
    APPEND ls_ti TO lt_options.
*   Manipulation of Element Content
    CLEAR ls_ti.
    ls_ti-name = txt_manipulation_of_element_co.
    ASSIGN COMPONENT 'BODYWRITER' OF STRUCTURE <ls_tag> TO <l_fs>.
    ls_ti-value = <l_fs>.
    ls_ti-flag = abap_true.
    APPEND ls_ti TO lt_options.
*   "PAGE DONE" is not returned at end of BSP element
    CLEAR ls_ti.
    ls_ti-name = txt_page_done_is_not_returned_.
    ASSIGN COMPONENT 'NOPAGEDONE' OF STRUCTURE <ls_tag> TO <l_fs>.
    ls_ti-value = <l_fs>.
    ls_ti-flag = abap_true.
    APPEND ls_ti TO lt_options.
*General Data
*   Created by
    CLEAR ls_ti.
    ls_ti-name = txt_created_by___1.
    ASSIGN COMPONENT 'AUTHOR' OF STRUCTURE <ls_tag> TO <l_fs>.
    ls_ti-value = <l_fs>.
    l_bname = <l_fs>.
    PERFORM get_user
      USING l_bname
      CHANGING l_name_text.
    ls_ti-value_text = l_name_text.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_general.
*   Creation Date
    CLEAR ls_ti.
    ls_ti-name = txt_creation_date.
    ASSIGN COMPONENT 'CREATEDON' OF STRUCTURE <ls_tag> TO <l_fs>.
    PERFORM get_date
      USING
        <l_fs>
      CHANGING
        ls_ti-value.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_general.
*   Last Changed
    CLEAR ls_ti.
    ls_ti-name = txt_last_changed.
    ASSIGN COMPONENT 'CHANGEDBY' OF STRUCTURE <ls_tag> TO <l_fs>.
    ls_ti-value = <l_fs>.
    l_bname = <l_fs>.
    PERFORM get_user
      USING l_bname
      CHANGING l_name_text.
    ls_ti-value_text = l_name_text.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_general.
*   Changed On
    CLEAR ls_ti.
    ls_ti-name = txt_changed_on.
    ASSIGN COMPONENT 'CHANGEDON' OF STRUCTURE <ls_tag> TO <l_fs>.
    PERFORM get_date
      USING
        <l_fs>
      CHANGING
        ls_ti-value.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_general.
*Attribute
    SELECT * FROM ('O2TAGATT') INTO <ls_att>
        WHERE tlibid = l_tlibid
        AND state = 'A'
        AND tagid = l_tagid.
      ASSIGN COMPONENT 'ATTID' OF STRUCTURE <ls_att> TO <l_fs>.
      ls_att-attid = <l_fs>.
      ASSIGN COMPONENT 'REQUIRED' OF STRUCTURE <ls_att> TO <l_fs>.
      ls_att-required = <l_fs>.
      ASSIGN COMPONENT 'RTEXPR' OF STRUCTURE <ls_att> TO <l_fs>.
      ls_att-rtexpr = <l_fs>.
      ASSIGN COMPONENT 'BYREF' OF STRUCTURE <ls_att> TO <l_fs>.
      ls_att-byref = <l_fs>.
      ASSIGN COMPONENT 'TYPE' OF STRUCTURE <ls_att> TO <l_fs>.
      ls_att-type = <l_fs>.
      ASSIGN COMPONENT 'DEFVAL' OF STRUCTURE <ls_att> TO <l_fs>.
      ls_att-defval = <l_fs>.
      ASSIGN COMPONENT 'BINDABLE' OF STRUCTURE <ls_att> TO <l_fs>.
      ls_att-bindable = <l_fs>.
      ASSIGN COMPONENT 'TYPTYPE' OF STRUCTURE <ls_att> TO <l_fs>.
      PERFORM get_dom_value_text
        USING
          'O2TYPTYPE'
          <l_fs>
        CHANGING
          ls_att-typtype_txt.
      SELECT SINGLE descript FROM ('TAGATTT') INTO ls_att-descript
          WHERE tlibid = l_tlibid
          AND state = 'A'
          AND langu = sy-langu
          AND tagid = l_tagid
          AND attid = ls_att-attid.
      APPEND ls_att TO lt_att.
    ENDSELECT.
*Title
    l_title = tpt_o2_wtag.
    PERFORM replace_single
      USING
        var_name_value
        <ls_ztadir>-obj_name
      CHANGING
        l_title.
*HTML
    PERFORM html_main_header
      USING
        l_title
        txt_bsp_element
        l_tagid
        txt_active___1
        space
        space
        space
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*   Properties
    PERFORM html_add_textinput_subboxes
      USING
        lt_props
        txt_element_content
        'ec'
        lt_content
        txt_further_options
        lt_options
        txt_general_data
        lt_general
        'PROPERTIES'
        abap_true
      CHANGING
        lt_html.
*   Attribute
    PERFORM html_add_table
      USING
        'WTAG_ATTR'
        lt_att
        lt_att
        'ATTRIBUTE'
        abap_false
      CHANGING
        lt_html.
*
    PERFORM html_main_footer
      USING
        lt_html.

    CONCATENATE <ls_ztadir>-obj_name '-' l_tagid INTO l_filename.
    PERFORM download
      USING
        lt_html
        <ls_ztadir>-pgmid
        <ls_ztadir>-object
        l_filename
        gc_extension_htm
        abap_true.
  ENDLOOP.

ENDFORM.                    "r3tr_wtag_ext


*-----------------------------------------------------------------------
* o2_r3tr_xslt                                  Transformations
*-----------------------------------------------------------------------
FORM o2_r3tr_xslt.

  DATA:
  lt_html TYPE it_string,
  lt_tabstrip TYPE it_tabstrip,
  l_name(40) TYPE c,
  ls_attributes TYPE st_attributes,
  l_author TYPE xubname,
  l_createdon TYPE dats,
  l_changedon TYPE dats,
  l_bname TYPE xubname,
  l_xslt_id(43) TYPE c,
  l_xslt_name TYPE progname.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_xslt_source> TYPE st_o2pageline.



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

    IF lt_tabstrip IS INITIAL.
      PERFORM get_tabstrip
        USING 'O2_R3TR_XSLT' space
        CHANGING lt_tabstrip.
    ENDIF.

    CLEAR:
    ls_attributes,
    l_xslt_name.

    REFRESH:
    lt_html.

    l_name = <ls_ztadir>-obj_name.
*Attributes
    SELECT SINGLE author createdon changedon changedby
      FROM ('O2XSLTDESC')
      INTO (ls_attributes-author, l_createdon,
        l_changedon, ls_attributes-bname)
      WHERE xsltdesc = l_name
      AND state = 'A'
      AND srtf2 = 0.

    l_author = ls_attributes-author.
    PERFORM get_user
      USING l_author
      CHANGING ls_attributes-author_text.
    PERFORM get_date
      USING l_createdon
      CHANGING ls_attributes-date_created.
    PERFORM get_date
      USING l_changedon
      CHANGING ls_attributes-date_last_changed.
    l_bname = ls_attributes-bname.
    PERFORM get_user
        USING l_bname
        CHANGING ls_attributes-name_text.

    ls_attributes-descript = <ls_ztadir>-descript.
    ls_attributes-devclass = <ls_ztadir>-devclass.
    PERFORM get_devclass
      USING ls_attributes-devclass
      CHANGING ls_attributes-devclass_descr.

    PERFORM get_spras
      USING <ls_ztadir>-masterlang
      CHANGING ls_attributes-laiso ls_attributes-sptxt.
*Source
    PERFORM get_trdir_name
      USING l_name 'XT'
      CHANGING l_xslt_name.
*HTML
    PERFORM html_main_header
      USING
        tpt_o2_xslt
        txt_transformation
        <ls_ztadir>-obj_name
        txt_active___1
        space
        space
        'makeDivSize(''SOURCECODE'')'
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
    PERFORM html_add_attributes_2
      USING
        ls_attributes
        'ATTRIBUTES'
        abap_false
      CHANGING
        lt_html.
    PERFORM add_report_sourcecode
      USING
        l_xslt_name
        l_name
        gc_extension_xsl
        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>-obj_name
        gc_extension_htm
        abap_true.
  ENDLOOP.

ENDFORM.                                                    "r3tr_xslt
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_PACK                                   *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* pack
*-----------------------------------------------------------------------
FORM pack.
*DEVCLASS
  PERFORM pack_r3tr_devc.

ENDFORM.                    "pack


*-----------------------------------------------------------------------
* pack_r3tr_devc                                Devclass
*-----------------------------------------------------------------------
FORM pack_r3tr_devc.

  DATA:
  lo_package TYPE REF TO if_package,
  l_as4text TYPE as4text,
  ls_attributes TYPE st_attributes,
  ls_ti TYPE st_textinput,
  lt_package_properties TYPE it_textinput,
  lt_transport_attributes TYPE it_textinput,
  l_intf_system TYPE srcsystem,
  l_pack_system TYPE srcsystem,
  lt_ref_interface TYPE tpak_package_interface_list,
  ls_ref_interface TYPE tpak_package_interface_ref,
  lt_interface TYPE it_pack_intf,
  ls_interface TYPE st_pack_intf,
  lt_ref_perm TYPE tpak_permission_to_use_list,
  ls_ref_perm TYPE tpak_permission_to_use_ref_typ,
  lt_perm TYPE it_pack_perm,
  ls_perm TYPE st_pack_perm,
  lt_ref_sub TYPE scompaklis,
  ls_ref_sub TYPE REF TO if_package,
  lt_sub TYPE it_pack_sub,
  ls_sub TYPE st_pack_sub,
  lt_tabstrip TYPE it_tabstrip,
  lt_html TYPE it_string.

  FIELD-SYMBOLS:
  <ls_tabstrip> TYPE st_tabstrip,
  <l_srv_check> TYPE ANY,
  <l_cli_check> TYPE ANY,
  <l_deleted_in_memory> TYPE ANY.

  CALL METHOD cl_package_factory=>load_package
    EXPORTING
      i_package_name = gs_tdevc-devclass
    IMPORTING
      e_package      = lo_package.

*general attributes
  PERFORM get_devclass
    USING
      gs_tdevc-devclass
    CHANGING
      l_as4text.
  ls_attributes-descript = l_as4text.
  ls_attributes-person_responsible = gs_tdevc-as4user.
  PERFORM get_user
    USING
      gs_tdevc-as4user
    CHANGING
      ls_attributes-person_responsible_text.
  ls_attributes-author = gs_tdevc-created_by.
  PERFORM get_user
    USING
      gs_tdevc-created_by
    CHANGING
      ls_attributes-author_text.
  PERFORM get_date
    USING
      gs_tdevc-created_on
    CHANGING
      ls_attributes-date_created.
  ls_attributes-bname = gs_tdevc-changed_by.
  PERFORM get_user
    USING
      gs_tdevc-changed_by
    CHANGING
      ls_attributes-name_text.
  PERFORM get_date
    USING
      gs_tdevc-changed_on
    CHANGING
      ls_attributes-date_last_changed.
  ls_attributes-application_component = gs_tdevc-component.
*package properties
  CLEAR ls_ti.
  ls_ti-name = txt_main_package.
  ls_ti-flag = abap_true.
  IF gs_tdevc-mainpack = 'X'.
    ls_ti-value = abap_true.
  ENDIF.
  APPEND ls_ti TO lt_package_properties.
  CLEAR ls_ti.
  ls_ti-name = txt_surrounding_package.
  ls_ti-input = abap_true.
  ls_ti-value = gs_tdevc-parentcl.
  APPEND ls_ti TO lt_package_properties.
  ls_ti-name = txt_allowed_object_types.
  ls_ti-input = abap_true.
  PERFORM get_dom_value_text
    USING
      'PACKTYPE'
      gs_tdevc-packtype
    CHANGING
      ls_ti-value.
  APPEND ls_ti TO lt_package_properties.
  CLEAR ls_ti.
  ls_ti-name = txt_package_not_extendable.
  ls_ti-flag = abap_true.
  ls_ti-value = gs_tdevc-restricted.
  APPEND ls_ti TO lt_package_properties.
  ASSIGN COMPONENT 'SRV_CHECK' OF STRUCTURE gs_tdevc TO <l_srv_check>.
  IF <l_srv_check> IS ASSIGNED.
    CLEAR ls_ti.
    ls_ti-name = txt_package_check_as_server.
    ls_ti-flag = abap_true.
    ls_ti-value = <l_srv_check>.
    APPEND ls_ti TO lt_package_properties.
    UNASSIGN <l_srv_check>.
  ENDIF.
  ASSIGN COMPONENT 'CLI_CHECK' OF STRUCTURE gs_tdevc TO <l_cli_check>.
  IF <l_cli_check> IS ASSIGNED.
    CLEAR ls_ti.
    ls_ti-name = txt_package_check_as_client.
    ls_ti-flag = abap_true.
    ls_ti-value = <l_cli_check>.
    APPEND ls_ti TO lt_package_properties.
    UNASSIGN <l_cli_check>.
  ENDIF.

*transport attributes
  CLEAR ls_ti.
  ls_ti-name = txt_transport_layer.
  ls_ti-input = abap_true.
  ls_ti-value = gs_tdevc-pdevclass.
  APPEND ls_ti TO lt_transport_attributes.
  CLEAR ls_ti.
  ls_ti-name = txt_software_component.
  ls_ti-input = abap_true.
  ls_ti-value_double_length = abap_true.
  ls_ti-value = gs_tdevc-dlvunit.
  APPEND ls_ti TO lt_transport_attributes.
  CLEAR ls_ti.
  ls_ti-name = txt_changes_are_recorded.
  ls_ti-flag = abap_true.
  ls_ti-value = gs_tdevc-korrflag.
  APPEND ls_ti TO lt_transport_attributes.

*package interfaces
  CALL METHOD lo_package->get_origin_system
    IMPORTING
      e_origin_system = l_pack_system
    EXCEPTIONS
      OTHERS          = 1.

  CALL METHOD lo_package->get_interfaces
    IMPORTING
      e_package_interfaces = lt_ref_interface
    EXCEPTIONS
      OTHERS               = 1.
  LOOP AT lt_ref_interface INTO ls_ref_interface.
    UNASSIGN <l_deleted_in_memory>.
    ASSIGN COMPONENT 'DELETED_IN_MEMORY' OF STRUCTURE
      ls_ref_interface TO <l_deleted_in_memory>.
    IF <l_deleted_in_memory> IS ASSIGNED
    AND <l_deleted_in_memory> = abap_true.
      CONTINUE.
    ENDIF.
    CLEAR ls_interface.
    ls_interface-intf_name = ls_ref_interface->interface_name.
    ls_interface-descript = ls_ref_interface->short_text.

    CALL METHOD ls_ref_interface->get_origin_system
      IMPORTING
        e_origin_system = l_intf_system
      EXCEPTIONS
        OTHERS          = 1.
    IF l_pack_system <> l_intf_system.
      ls_interface-forsys = txt_foreign_source_system.
    ENDIF.
    APPEND ls_interface TO lt_interface.
  ENDLOOP.

*use access
  CALL METHOD lo_package->get_permissions_to_use
    IMPORTING
      e_permissions = lt_ref_perm
    EXCEPTIONS
      OTHERS        = 1.
  LOOP AT lt_ref_perm INTO ls_ref_perm.
    UNASSIGN <l_deleted_in_memory>.
    ASSIGN COMPONENT 'DELETED_IN_MEMORY' OF STRUCTURE ls_ref_perm
      TO <l_deleted_in_memory>.
    IF <l_deleted_in_memory> IS ASSIGNED
    AND <l_deleted_in_memory> = abap_true.
      CONTINUE.
    ENDIF.
    CLEAR ls_perm.
    ls_perm-pack_name = ls_ref_perm->publisher_package_name.
    ls_perm-intf_name = ls_ref_perm->package_interface_name.
    PERFORM get_dom_value_text
      USING
        'ERRSEVRTY'
        ls_ref_perm->error_severity
      CHANGING
        ls_perm-err_sever.
    APPEND ls_perm TO lt_perm.
  ENDLOOP.

*packages included
  CALL METHOD lo_package->get_sub_packages
    IMPORTING
      e_sub_packages = lt_ref_sub
    EXCEPTIONS
      OTHERS         = 1.
  LOOP AT lt_ref_sub INTO ls_ref_sub.
    UNASSIGN <l_deleted_in_memory>.
    ASSIGN COMPONENT 'DELETED_IN_MEMORY' OF STRUCTURE ls_ref_sub
      TO <l_deleted_in_memory>.
    IF <l_deleted_in_memory> IS ASSIGNED
    AND <l_deleted_in_memory> = abap_true.
      CONTINUE.
    ENDIF.
    CLEAR ls_sub.
    ls_sub-devclass = ls_ref_sub->package_name.
    ls_sub-ctext = ls_ref_sub->short_text.
    APPEND ls_sub TO lt_sub.
  ENDLOOP.

*tabstrip
  PERFORM get_tabstrip
    USING 'PACK_DEVC' space
    CHANGING lt_tabstrip.
  LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
    <ls_tabstrip>-empty = abap_false.
    CASE <ls_tabstrip>-id.
      WHEN 'INTERFACE'.
        IF lt_interface IS INITIAL.
          <ls_tabstrip>-empty = abap_true.
        ENDIF.
      WHEN 'PERM'.
        IF lt_perm IS INITIAL.
          <ls_tabstrip>-empty = abap_true.
        ENDIF.
      WHEN 'SUB'.
        IF lt_sub IS INITIAL.
          <ls_tabstrip>-empty = abap_true.
        ENDIF.
    ENDCASE.
  ENDLOOP.

**HTML
  PERFORM html_main_header
    USING
      tpt_pack_devc
      txt_package
      gs_tdevc-devclass
      txt_saved
      space
      space
      space  " 'makeDivSize(''SOURCECODE'');'
      lt_tabstrip
      gt_link
    CHANGING
      lt_html.

* attributes
  PERFORM html_add_attributes_4
    USING
      ls_attributes
      txt_package_properties
      lt_package_properties
      txt_transport_attributes
      lt_transport_attributes
      'ATTRIBUTES'
      abap_true
    CHANGING
      lt_html.
* interface
  IF NOT lt_interface IS INITIAL
  OR g_empty_tab = gc_empty_tab_display.
    PERFORM html_add_table
      USING
        'DEVC_INTF'
        lt_interface
        lt_interface
        'INTERFACE'
        abap_false
      CHANGING
        lt_html.
  ENDIF.
* perm
  IF NOT lt_perm IS INITIAL
  OR g_empty_tab = gc_empty_tab_display.
    PERFORM html_add_table
      USING
        'DEVC_PERM'
        lt_perm
        lt_perm
        'PERM'
        abap_false
      CHANGING
        lt_html.
  ENDIF.
* sub
  IF NOT lt_sub IS INITIAL
  OR g_empty_tab = gc_empty_tab_display.
    PERFORM html_add_table
      USING
        'DEVC_SUB'
        lt_sub
        lt_sub
        'SUB'
        abap_false
      CHANGING
        lt_html.
  ENDIF.
*
  PERFORM html_main_footer
    USING
      lt_html.

  PERFORM download
    USING
      lt_html
      'R3TR'
      'DEVC'
      gs_tdevc-devclass
      gc_extension_htm
      abap_false.

ENDFORM.                                                    "r3tr_devc
*&---------------------------------------------------------------------*
*&  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
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_SEO                                    *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* seo
*-----------------------------------------------------------------------
FORM seo.
*INTF
  PERFORM seo_r3tr_intf.
*CLAS
  PERFORM seo_r3tr_clas.
*CLAS methods
  PERFORM seo_r3tr_clas_methods.

ENDFORM.                    "seo


*-----------------------------------------------------------------------
* seo_clas_get_attribs
*-----------------------------------------------------------------------
FORM seo_clas_get_attribs
  USING
    value(i_clsname)
    it_super_class TYPE it_seo_super_class
    it_ref_interface TYPE it_ref_seointerface
  CHANGING
    ct_ref_attrib TYPE it_ref_seoattrib.

  REFRESH ct_ref_attrib.

*Attributes - from Interfaces
  PERFORM seo_clas_get_attribs_from_intf
    USING
      i_clsname
      it_super_class
      it_ref_interface
    CHANGING
      ct_ref_attrib.
*Attributes - from Classes
  PERFORM seo_clas_get_attribs_from_clas
    USING
      i_clsname
      it_super_class
    CHANGING
      ct_ref_attrib.
ENDFORM.                    "seo_clas_get_attribs


*-----------------------------------------------------------------------
* seo_clas_get_aliases
*-----------------------------------------------------------------------
FORM seo_clas_get_aliases
  USING
    value(i_clsname)
    it_ref_attrib TYPE it_ref_seoattrib
    it_ref_method TYPE it_ref_seomethod
    it_ref_event TYPE it_ref_seoevent
    it_ref_type TYPE it_ref_seotype
  CHANGING
    ct_ref_alias TYPE it_ref_seoalias.

  DATA:
  ls_ref_alias TYPE st_ref_seoalias,
  lt_ref_alias_tmp TYPE it_ref_seoalias,
  ls_clskey TYPE seoclskey,
  lt_seoalias TYPE seo_aliases,
  l_clsname TYPE seoclsname,
  l_cmpname TYPE seocmpname.

  FIELD-SYMBOLS:
  <ls_ref_attrib> TYPE st_ref_seoattrib,
  <ls_ref_method> TYPE st_ref_seomethod,
  <ls_ref_event> TYPE st_ref_seoevent,
  <ls_ref_type> TYPE st_ref_seotype,
  <ls_ref_alias> TYPE st_ref_seoalias,
  <ls_alias> TYPE seoaliases.

  REFRESH:
  ct_ref_alias.

  ls_ref_alias-type = txt_attribute.
  LOOP AT it_ref_attrib ASSIGNING <ls_ref_attrib>
    WHERE cpdname CP '*~*'.
    ls_ref_alias-cpdname = <ls_ref_attrib>-cpdname.
    ls_ref_alias-owner = <ls_ref_attrib>-owner.
    APPEND ls_ref_alias TO lt_ref_alias_tmp.
  ENDLOOP.
  ls_ref_alias-type = txt_method.
  LOOP AT it_ref_method ASSIGNING <ls_ref_method>
    WHERE cpdname CP '*~*'.
    ls_ref_alias-cpdname = <ls_ref_method>-cpdname.
    ls_ref_alias-owner = <ls_ref_method>-owner.
    APPEND ls_ref_alias TO lt_ref_alias_tmp.
  ENDLOOP.
  ls_ref_alias-type = txt_event.
  LOOP AT it_ref_event ASSIGNING <ls_ref_event>
    WHERE cpdname CP '*~*'.
    ls_ref_alias-cpdname = <ls_ref_event>-cpdname.
    ls_ref_alias-owner = <ls_ref_event>-owner.
    APPEND ls_ref_alias TO lt_ref_alias_tmp.
  ENDLOOP.
  ls_ref_alias-type = txt_type___1.
  LOOP AT it_ref_type ASSIGNING <ls_ref_type>
    WHERE cpdname CP '*~*'.
    ls_ref_alias-cpdname = <ls_ref_type>-cpdname.
    ls_ref_alias-owner = <ls_ref_type>-owner.
    APPEND ls_ref_alias TO lt_ref_alias_tmp.
  ENDLOOP.
*
  ls_clskey-clsname = i_clsname.
  CALL FUNCTION 'SEO_ALIASES_GET'
    EXPORTING
      cifkey  = ls_clskey
    CHANGING
      aliases = lt_seoalias.
  l_clsname = i_clsname.
  LOOP AT lt_ref_alias_tmp ASSIGNING <ls_ref_alias>
    WHERE cpdname CP '*~*'
    AND owner = i_clsname.
    SPLIT <ls_ref_alias>-cpdname AT '~'
      INTO l_clsname l_cmpname.
    READ TABLE lt_seoalias ASSIGNING <ls_alias>
      WITH KEY cmpname = l_cmpname.
    IF sy-subrc = 0.
      <ls_ref_alias>-refcmpname = <ls_alias>-cmpname.
      PERFORM get_dom_value_text
        USING
          'SEOEXPOSE'
          <ls_alias>-exposure
        CHANGING
          <ls_ref_alias>-exposure.
      IF NOT <ls_ref_alias>-refcmpname IS INITIAL
           AND <ls_alias>-exposure > 0.
        APPEND <ls_ref_alias> TO ct_ref_alias.
      ENDIF.
    ELSE.
      APPEND <ls_ref_alias> TO ct_ref_alias.
    ENDIF.
  ENDLOOP.
  SORT ct_ref_alias BY cpdname.
ENDFORM.                    "seo_clas_get_aliases


*-----------------------------------------------------------------------
* seo_clas_get_attribs_from_clas
*-----------------------------------------------------------------------
FORM seo_clas_get_attribs_from_clas
  USING
    value(i_clsname)
    it_super_class TYPE it_seo_super_class
  CHANGING
    ct_ref_attrib TYPE it_ref_seoattrib.

  DATA:
  lt_attrib TYPE STANDARD TABLE OF vseoattrib,
  l_cpdname TYPE seocpdname,
  ls_ref_attrib TYPE st_ref_seoattrib,
  l_str TYPE string,
  l_id TYPE string.

  FIELD-SYMBOLS:
  <ls_super_class> TYPE st_seo_super_class,
  <ls_attrib> TYPE vseoattrib,
  <ls_ref_attrib> TYPE st_ref_seoattrib.

  LOOP AT it_super_class ASSIGNING <ls_super_class>.
    SELECT * FROM vseoattrib INTO TABLE lt_attrib
      WHERE clsname = <ls_super_class>-clsname
      AND alias = abap_false
      AND langu = sy-langu
      AND version = '1'
      ORDER BY editorder.
    LOOP AT lt_attrib ASSIGNING <ls_attrib>.
      l_cpdname = <ls_attrib>-cmpname.
      READ TABLE ct_ref_attrib ASSIGNING <ls_ref_attrib>
        WITH KEY cpdname = l_cpdname.
      IF sy-subrc = 0.
        IF <ls_super_class>-clsname = i_clsname.
          <ls_ref_attrib>-inherited = abap_false.
        ENDIF.
      ELSEIF <ls_super_class>-clsname = i_clsname
      OR <ls_attrib>-exposure > 0.
        ls_ref_attrib-cpdname = l_cpdname.
        IF <ls_super_class>-clsname = i_clsname.
          ls_ref_attrib-inherited = abap_false.
        ELSE.
          ls_ref_attrib-inherited = abap_true.
        ENDIF.
        PERFORM get_dom_value_text
          USING
            'SEOEXPOSE'
            <ls_attrib>-exposure
          CHANGING
            ls_ref_attrib-exposure.
        PERFORM seo_get_check_model
          USING <ls_attrib>
          CHANGING ls_ref_attrib.
        PERFORM get_dom_value_text
          USING
            'SEOATTDECL'
            <ls_attrib>-attdecltyp
          CHANGING
            ls_ref_attrib-decltype.
        ls_ref_attrib-attrdonly = <ls_attrib>-attrdonly.
        PERFORM get_dom_value_text
          USING
            'SEOTYPTYPE'
            <ls_attrib>-typtype
          CHANGING
            ls_ref_attrib-typtype.
        ls_ref_attrib-type = <ls_attrib>-type.
        l_str = <ls_attrib>-exposure.
        CONDENSE l_str.
        CONCATENATE 'COMPONENTS_' l_str '_' INTO l_str.
        PERFORM get_id
          USING l_str <ls_super_class>-clsname
          CHANGING l_id.
        CONCATENATE 'switchContent(''' l_id ''')'
            INTO ls_ref_attrib-onclick.
        ls_ref_attrib-typelink = '->'.
        ls_ref_attrib-descript = <ls_attrib>-descript.
        ls_ref_attrib-attvalue = <ls_attrib>-attvalue.
        ls_ref_attrib-owner = <ls_super_class>-clsname.
        APPEND ls_ref_attrib TO ct_ref_attrib.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "seo_clas_get_attribs_from_clas


*-----------------------------------------------------------------------
* seo_clas_get_attribs_from_intf
*-----------------------------------------------------------------------
FORM seo_clas_get_attribs_from_intf
  USING
    value(i_clsname)
    it_super_class TYPE it_seo_super_class
    it_ref_interface TYPE it_ref_seointerface
  CHANGING
    ct_ref_attrib TYPE it_ref_seoattrib.

  DATA:
  lt_attrib TYPE STANDARD TABLE OF vseoattrib,
  l_cpdname TYPE seocpdname,
  ls_ref_attrib TYPE st_ref_seoattrib,
  l_str TYPE string,
  l_id TYPE string.

  FIELD-SYMBOLS:
  <ls_super_class> TYPE st_seo_super_class,
  <ls_ref_interface> TYPE st_ref_seointerface,
  <ls_attrib> TYPE vseoattrib,
  <ls_ref_attrib> TYPE st_ref_seoattrib.

  LOOP AT it_super_class ASSIGNING <ls_super_class>.
    LOOP AT it_ref_interface ASSIGNING <ls_ref_interface>
      WHERE owner = <ls_super_class>-clsname.
      SELECT * FROM vseoattrib INTO TABLE lt_attrib
        WHERE clsname = <ls_ref_interface>-refclsname
        AND alias = abap_false
        AND langu = sy-langu
        AND version = '1'
        ORDER BY editorder.
      LOOP AT lt_attrib ASSIGNING <ls_attrib>.
        CONCATENATE
          <ls_attrib>-clsname '~' <ls_attrib>-cmpname
          INTO l_cpdname.
        READ TABLE ct_ref_attrib ASSIGNING <ls_ref_attrib>
          WITH KEY cpdname = l_cpdname.
        IF sy-subrc <> 0
        AND ( <ls_super_class>-clsname = i_clsname
        OR <ls_attrib>-exposure > 0 ).
          ls_ref_attrib-cpdname = l_cpdname.
          IF <ls_super_class>-clsname = i_clsname.
            ls_ref_attrib-inherited = abap_false.
          ELSE.
            ls_ref_attrib-inherited = abap_true.
          ENDIF.
          PERFORM get_dom_value_text
            USING
              'SEOEXPOSE'
              <ls_attrib>-exposure
            CHANGING
              ls_ref_attrib-exposure.
          PERFORM seo_get_check_model
            USING <ls_attrib>
            CHANGING ls_ref_attrib.
          PERFORM get_dom_value_text
            USING
              'SEOATTDECL'
              <ls_attrib>-attdecltyp
            CHANGING
              ls_ref_attrib-decltype.
          ls_ref_attrib-attrdonly = <ls_attrib>-attrdonly.
          PERFORM get_dom_value_text
            USING
              'SEOTYPTYPE'
              <ls_attrib>-typtype
            CHANGING
              ls_ref_attrib-typtype.
          ls_ref_attrib-type = <ls_attrib>-type.
          l_str = <ls_attrib>-exposure.
          CONDENSE l_str.
          CONCATENATE 'COMPONENTS_' l_str '_' INTO l_str.
          PERFORM get_id
            USING l_str <ls_super_class>-clsname
            CHANGING l_id.
          CONCATENATE 'switchContent(''' l_id ''')'
            INTO ls_ref_attrib-onclick.
          ls_ref_attrib-typelink = '->'.
          ls_ref_attrib-descript = <ls_attrib>-descript.
          ls_ref_attrib-attvalue = <ls_attrib>-attvalue.
          ls_ref_attrib-owner = <ls_super_class>-clsname.
          APPEND ls_ref_attrib TO ct_ref_attrib.
        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "seo_clas_get_attribs_from_intf


*-----------------------------------------------------------------------
* seo_clas_get_events
*-----------------------------------------------------------------------
FORM seo_clas_get_events
  USING
    value(i_clsname)
    it_super_class TYPE it_seo_super_class
    it_ref_interface TYPE it_ref_seointerface
  CHANGING
    ct_ref_event TYPE it_ref_seoevent.

  REFRESH:
  ct_ref_event.

*Events - from Interfaces
  PERFORM seo_clas_get_events_from_intf
    USING
      i_clsname
      it_super_class
      it_ref_interface
    CHANGING
      ct_ref_event.
*Events - from Classes
  PERFORM seo_clas_get_events_from_clas
    USING
      i_clsname
      it_super_class
    CHANGING
      ct_ref_event.

ENDFORM.                    "seo_clas_get_events


*-----------------------------------------------------------------------
* seo_clas_get_events_from_clas
*-----------------------------------------------------------------------
FORM seo_clas_get_events_from_clas
  USING
    value(i_clsname)
    it_super_class TYPE it_seo_super_class
  CHANGING
    ct_ref_event TYPE it_ref_seoevent.

  DATA:
  lt_event TYPE STANDARD TABLE OF vseoevent,
  ls_ref_event TYPE st_ref_seoevent,
  ls_cmpkey TYPE seocmpkey.

  FIELD-SYMBOLS:
  <ls_super_class> TYPE st_seo_super_class,
  <ls_event> TYPE vseoevent.

  LOOP AT it_super_class ASSIGNING <ls_super_class>.
    SELECT * FROM vseoevent INTO TABLE lt_event
      WHERE clsname = <ls_super_class>-clsname
      AND langu = sy-langu
      AND alias = abap_false
      AND version = '1'
      ORDER BY editorder.
    LOOP AT lt_event ASSIGNING <ls_event>.
      CLEAR ls_ref_event.
      ls_cmpkey-clsname = <ls_super_class>-clsname.
      ls_cmpkey-cmpname = <ls_event>-cmpname.
      CALL FUNCTION 'SEO_EVENT_GET'
        EXPORTING
          evtkey  = ls_cmpkey
          version = 1
        IMPORTING
          event   = <ls_event>
        EXCEPTIONS
          OTHERS  = 1.
      IF sy-subrc = 0 AND <ls_event>-alias = abap_false.
        ls_ref_event-owner = <ls_super_class>-clsname.
        IF <ls_super_class>-clsname <> i_clsname.
          ls_ref_event-inherited = abap_true.
        ENDIF.
        ls_ref_event-cpdname = <ls_event>-cmpname.
        PERFORM get_dom_value_text
          USING
            'SEOEVTDECL'
            <ls_event>-evtdecltyp
          CHANGING
            ls_ref_event-type.
        PERFORM get_dom_value_text
          USING
            'SEOEXPOSE'
            <ls_event>-exposure
          CHANGING
            ls_ref_event-exposure.
        PERFORM seo_get_check_model
          USING <ls_event>
          CHANGING ls_ref_event.
        ls_ref_event-descript = <ls_event>-descript.
        APPEND ls_ref_event TO ct_ref_event.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "seo_clas_get_events_from_clas


*-----------------------------------------------------------------------
* seo_clas_get_events_from_intf
*-----------------------------------------------------------------------
FORM seo_clas_get_events_from_intf
  USING
    value(i_clsname)
    it_super_class TYPE it_seo_super_class
    it_ref_interface TYPE it_ref_seointerface
  CHANGING
    ct_ref_event TYPE it_ref_seoevent.

  DATA:
  lt_event TYPE STANDARD TABLE OF vseoevent,
  ls_ref_event TYPE st_ref_seoevent,
  ls_cmpkey TYPE seocmpkey.

  FIELD-SYMBOLS:
  <ls_super_class> TYPE st_seo_super_class,
  <ls_ref_interface> TYPE st_ref_seointerface,
  <ls_event> TYPE vseoevent.

  LOOP AT it_super_class ASSIGNING <ls_super_class>.
    LOOP AT it_ref_interface ASSIGNING <ls_ref_interface>
      WHERE owner = <ls_super_class>-clsname.
      SELECT * FROM vseoevent INTO TABLE lt_event
        WHERE clsname = <ls_ref_interface>-refclsname
        AND langu = sy-langu
        AND alias = abap_false
        AND version = '1'
        ORDER BY editorder.
      LOOP AT lt_event ASSIGNING <ls_event>.
        CLEAR ls_ref_event.
        ls_cmpkey-clsname = <ls_ref_interface>-refclsname.
        IF <ls_super_class>-clsname <> i_clsname.
          ls_ref_event-inherited = abap_true.
        ENDIF.
        ls_cmpkey-cmpname = <ls_event>-cmpname.
        CALL FUNCTION 'SEO_EVENT_GET'
          EXPORTING
            evtkey  = ls_cmpkey
            version = 1
          IMPORTING
            event   = <ls_event>
          EXCEPTIONS
            OTHERS  = 1.
        IF sy-subrc = 0 AND <ls_event>-alias = abap_false.
          ls_ref_event-owner = <ls_super_class>-clsname.
          CONCATENATE <ls_ref_interface>-refclsname '~'
              <ls_event>-cmpname INTO ls_ref_event-cpdname.
          PERFORM get_dom_value_text
            USING
              'SEOEVTDECL'
              <ls_event>-evtdecltyp
            CHANGING
              ls_ref_event-type.
          PERFORM get_dom_value_text
            USING
              'SEOEXPOSE'
              <ls_event>-exposure
            CHANGING
              ls_ref_event-exposure.
          PERFORM seo_get_check_model
            USING <ls_event>
            CHANGING ls_ref_event.
          ls_ref_event-descript = <ls_event>-descript.
          APPEND ls_ref_event TO ct_ref_event.
        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDLOOP.

ENDFORM.                    "seo_clas_get_events_from_intf


*-----------------------------------------------------------------------
* seo_clas_get_friends
*-----------------------------------------------------------------------
FORM seo_clas_get_friends
  USING
    value(i_clsname)
  CHANGING
    ct_ref_friends TYPE it_ref_seofriends.

  DATA:
  lt_friends TYPE STANDARD TABLE OF seofriends,
  ls_ref_friends TYPE st_ref_seofriends.

  FIELD-SYMBOLS:
  <ls_friends> TYPE seofriends.

  REFRESH:
  ct_ref_friends.

  SELECT * FROM seofriends INTO TABLE lt_friends
    WHERE clsname = i_clsname
    AND version = '1'
    ORDER BY refclsname.
  LOOP AT lt_friends ASSIGNING <ls_friends>.
    CLEAR ls_ref_friends.
    READ TABLE ct_ref_friends TRANSPORTING NO FIELDS
      WITH KEY refclsname = <ls_friends>-refclsname.
    IF sy-subrc <> 0.
      ls_ref_friends-refclsname = <ls_friends>-refclsname.
      PERFORM seo_get_check_model
        USING <ls_friends>
        CHANGING ls_ref_friends.
      SELECT SINGLE descript FROM seoclasstx
        INTO ls_ref_friends-descript
        WHERE clsname = <ls_friends>-refclsname
        AND langu = sy-langu.
      APPEND ls_ref_friends TO ct_ref_friends.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "seo_clas_get_friends


*-----------------------------------------------------------------------
* seo_clas_get_interfaces
*-----------------------------------------------------------------------
FORM seo_clas_get_interfaces
  USING
    value(i_clsname)
    it_super_class TYPE it_seo_super_class
  CHANGING
    ct_ref_interface TYPE it_ref_seointerface
    ct_ref_interface_all TYPE it_ref_seointerface.

  DATA:
  lt_ref_interface_tmp TYPE it_ref_seointerface,
  lt_ref_interface_all_tmp TYPE it_ref_seointerface.

  FIELD-SYMBOLS:
  <ls_super_class> TYPE st_seo_super_class,
  <ls_ref_interface> TYPE st_ref_seointerface.

  REFRESH:
  ct_ref_interface,
  ct_ref_interface_all.

  LOOP AT it_super_class ASSIGNING <ls_super_class>.
    REFRESH lt_ref_interface_tmp.
    PERFORM seo_get_interfaces
      USING
        <ls_super_class>-clsname
        0
      CHANGING
        lt_ref_interface_tmp
        lt_ref_interface_all_tmp.
    LOOP AT lt_ref_interface_tmp ASSIGNING <ls_ref_interface>.
      <ls_ref_interface>-owner = <ls_super_class>.
      IF <ls_super_class>-clsname <> i_clsname.
        <ls_ref_interface>-inherited = abap_true.
      ENDIF.
      APPEND <ls_ref_interface> TO ct_ref_interface.
    ENDLOOP.
    LOOP AT lt_ref_interface_all_tmp
        ASSIGNING <ls_ref_interface>.
      <ls_ref_interface>-owner = <ls_super_class>.
      IF <ls_super_class>-clsname <> i_clsname.
        <ls_ref_interface>-inherited = abap_true.
      ENDIF.
      APPEND <ls_ref_interface> TO ct_ref_interface_all.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "seo_clas_get_interfaces


*-----------------------------------------------------------------------
* seo_clas_get_methods
*-----------------------------------------------------------------------
FORM seo_clas_get_methods
  USING
    is_ztadir TYPE st_ztadir
    it_super_class TYPE it_seo_super_class
    it_ref_interface TYPE it_ref_seointerface
  CHANGING
    ct_ref_method TYPE it_ref_seomethod.

  DATA:
  ls_zseomethod TYPE st_zseomethod,
  l_cpdname TYPE seocpdname.

  FIELD-SYMBOLS:
  <ls_ref_method> TYPE st_ref_seomethod.

  REFRESH:
  ct_ref_method.

*Methods - from Interfaces
  PERFORM seo_clas_get_methods_from_intf
    USING
      is_ztadir-obj_name
      it_super_class
      it_ref_interface
    CHANGING
      ct_ref_method.
*Methods - from Classes
  PERFORM seo_clas_get_methods_from_clas
    USING
      is_ztadir-obj_name
      it_super_class
    CHANGING
      ct_ref_method.
*Methods - check redefinitions
  PERFORM seo_clas_get_methods_redef
    USING
      is_ztadir-obj_name
      it_super_class
    CHANGING
      ct_ref_method.
*  select mtdname from seoredef into l_cpdname
*    where clsname = is_ztadir-obj_name
*    and version = '1'.
*    read table ct_ref_method assigning <ls_ref_method>
*      with key cpdname = l_cpdname.
*    if sy-subrc = 0.
*      <ls_ref_method>-inherited = abap_false.
*      <ls_ref_method>-redefin = abap_true.
*    endif.
*  endselect.
*Methods - add to global methods' table
  LOOP AT ct_ref_method ASSIGNING <ls_ref_method>.
    READ TABLE gt_zseomethod TRANSPORTING NO FIELDS
      WITH KEY devclass = is_ztadir-devclass
      pgmid = is_ztadir-pgmid
      object = is_ztadir-object
      clsname = <ls_ref_method>-owner
      cpdname = <ls_ref_method>-cpdname.
    IF sy-subrc <> 0.
      CLEAR ls_zseomethod.
      ls_zseomethod-pgmid = is_ztadir-pgmid.
      ls_zseomethod-object = is_ztadir-object.
      ls_zseomethod-devclass = is_ztadir-devclass.
      ls_zseomethod-clsname = <ls_ref_method>-owner.
      ls_zseomethod-cpdname = <ls_ref_method>-cpdname.
      ls_zseomethod-active = <ls_ref_method>-active.
      APPEND ls_zseomethod TO gt_zseomethod.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "seo_clas_get_methods


*-----------------------------------------------------------------------
* seo_clas_get_methods_from_clas
*-----------------------------------------------------------------------
FORM seo_clas_get_methods_from_clas
  USING
    value(i_clsname)
    it_super_class TYPE it_seo_super_class
  CHANGING
    ct_ref_method TYPE it_ref_seomethod.

  DATA:
  lt_method TYPE STANDARD TABLE OF vseomethod,
  l_cpdname TYPE seocpdname,
  ls_ref_method TYPE st_ref_seomethod,
  lt_str TYPE it_string,
  lt_redef TYPE STANDARD TABLE OF seoredef.

  FIELD-SYMBOLS:
  <ls_super_class> TYPE st_seo_super_class,
  <ls_method> TYPE vseomethod,
  <ls_ref_method> TYPE st_ref_seomethod,
  <ls_redef> TYPE seoredef.

  LOOP AT it_super_class ASSIGNING <ls_super_class>.
    SELECT * FROM vseomethod INTO TABLE lt_method
      WHERE clsname = <ls_super_class>-clsname
      AND langu = sy-langu
      AND alias = abap_false
      AND version = '1'
      ORDER BY editorder.
    IF <ls_super_class>-clsname <> i_clsname.
      DELETE lt_method WHERE cmpname = 'CLASS_CONSTRUCTOR'
      OR cmpname = 'DESTRUCTOR'.
    ENDIF.
    LOOP AT lt_method ASSIGNING <ls_method>.
      l_cpdname = <ls_method>-cmpname.
      READ TABLE ct_ref_method ASSIGNING <ls_ref_method>
        WITH KEY cpdname = l_cpdname.
      IF sy-subrc = 0
      AND l_cpdname <> 'CONSTRUCTOR'.
        IF <ls_super_class>-clsname = i_clsname.
          <ls_ref_method>-inherited = abap_false.
          UNASSIGN <ls_ref_method>.
        ENDIF.
      ELSEIF <ls_super_class>-clsname = i_clsname
      OR <ls_method>-exposure > 0.
        CLEAR ls_ref_method.
        ls_ref_method-cpdname = l_cpdname.
        IF <ls_super_class>-clsname <> i_clsname.
          ls_ref_method-inherited = abap_true.
        ENDIF.
        PERFORM get_dom_value_text
          USING
            'SEOVERSION'
            <ls_method>-version
          CHANGING
            ls_ref_method-active.
        PERFORM get_dom_value_text
          USING
            'SEOMTDDECL'
            <ls_method>-mtddecltyp
          CHANGING
            ls_ref_method-type.
        PERFORM get_dom_value_text
          USING
            'SEOEXPOSE'
            <ls_method>-exposure
          CHANGING
            ls_ref_method-exposure.
        PERFORM seo_get_check_model
          USING <ls_method>
          CHANGING ls_ref_method.
        PERFORM get_dom_value_text
          USING
            'SEOMTDTYPE'
            <ls_method>-mtdtype
          CHANGING
            ls_ref_method-methodtype.
        ls_ref_method-descript = <ls_method>-descript.
        ls_ref_method-owner = <ls_super_class>-clsname.
        CONCATENATE
          ls_ref_method-owner '-'
          ls_ref_method-cpdname
          INTO ls_ref_method-onclick.
        SPLIT ls_ref_method-onclick AT '/' INTO TABLE lt_str.
        LOOP AT lt_str INTO ls_ref_method-onclick.
        ENDLOOP.
        CONCATENATE
          'loadIFrame(''IFRAME'', '''
          ls_ref_method-onclick '.'
          gc_extension_htm ''');'
          'switchContent(''IFRAME'
            ''')'
          INTO ls_ref_method-onclick.
        PERFORM replace_all
          USING '~' '-'
          CHANGING ls_ref_method-onclick.
        IF l_cpdname = 'CONSTRUCTOR'
        AND <ls_ref_method> IS ASSIGNED.
          DELETE ct_ref_method
            WHERE owner = <ls_ref_method>-owner
            AND cpdname = <ls_ref_method>-cpdname.
        ENDIF.
        APPEND ls_ref_method TO ct_ref_method.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "seo_clas_get_methods_from_clas


*-----------------------------------------------------------------------
* seo_clas_get_methods_from_intf
*-----------------------------------------------------------------------
FORM seo_clas_get_methods_from_intf
  USING
    value(i_clsname)
    it_super_class TYPE it_seo_super_class
    it_ref_interface TYPE it_ref_seointerface
  CHANGING
    ct_ref_method TYPE it_ref_seomethod.

  DATA:
  lt_method TYPE STANDARD TABLE OF vseomethod,
  l_cpdname TYPE seocpdname,
  ls_ref_method TYPE st_ref_seomethod,
  lt_str TYPE it_string.

  FIELD-SYMBOLS:
  <ls_super_class> TYPE st_seo_super_class,
  <ls_ref_interface> TYPE st_ref_seointerface,
  <ls_method> TYPE vseomethod,
  <ls_ref_method> TYPE st_ref_seomethod.

  LOOP AT it_super_class ASSIGNING <ls_super_class>.
    LOOP AT it_ref_interface ASSIGNING <ls_ref_interface>
      WHERE owner = <ls_super_class>-clsname.
      SELECT * FROM vseomethod INTO TABLE lt_method
        WHERE clsname = <ls_ref_interface>-refclsname
        AND langu = sy-langu
        AND alias = abap_false
        AND version = '1'
        ORDER BY editorder.
      LOOP AT lt_method ASSIGNING <ls_method>.
        CONCATENATE
          <ls_ref_interface>-refclsname '~'
          <ls_method>-cmpname
          INTO l_cpdname.
        READ TABLE ct_ref_method ASSIGNING <ls_ref_method>
          WITH KEY cpdname = l_cpdname.
        IF sy-subrc <> 0
        AND ( <ls_super_class>-clsname = i_clsname
              OR <ls_method>-exposure > 0 ).
          CLEAR ls_ref_method.
          ls_ref_method-cpdname = l_cpdname.
          IF <ls_super_class>-clsname <> i_clsname.
            ls_ref_method-inherited = abap_true.
          ENDIF.
          PERFORM get_dom_value_text
            USING
              'SEOVERSION'
              <ls_method>-version
            CHANGING
              ls_ref_method-active.
          PERFORM get_dom_value_text
            USING
              'SEOMTDDECL'
              <ls_method>-mtddecltyp
            CHANGING
              ls_ref_method-type.
          PERFORM get_dom_value_text
            USING
              'SEOEXPOSE'
              <ls_method>-exposure
            CHANGING
              ls_ref_method-exposure.
          PERFORM seo_get_check_model
            USING <ls_method>
            CHANGING ls_ref_method.
          PERFORM get_dom_value_text
            USING
              'SEOMTDTYPE'
              <ls_method>-mtdtype
            CHANGING
              ls_ref_method-methodtype.
          ls_ref_method-descript = <ls_method>-descript.
          ls_ref_method-owner = <ls_super_class>-clsname.
          ls_ref_method-onclick = ls_ref_method-owner.
          SPLIT ls_ref_method-onclick AT '/' INTO TABLE lt_str.
          LOOP AT lt_str INTO ls_ref_method-onclick.
          ENDLOOP.
          CONCATENATE
            ls_ref_method-onclick '-'
            ls_ref_method-cpdname
            INTO ls_ref_method-onclick.
          CONCATENATE
            'loadIFrame(''IFRAME'', '''
            ls_ref_method-onclick '.'
            gc_extension_htm ''');'
            'switchContent(''IFRAME'')'
            INTO ls_ref_method-onclick.
          PERFORM replace_all
            USING '~' '-'
            CHANGING ls_ref_method-onclick.
          APPEND ls_ref_method TO ct_ref_method.
        ENDIF.
      ENDLOOP.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "seo_clas_get_methods_from_intf


*-----------------------------------------------------------------------
* seo_clas_get_methods_redef
*-----------------------------------------------------------------------
FORM seo_clas_get_methods_redef
  USING
    value(i_clsname)
    it_super_class TYPE it_seo_super_class
  CHANGING
    ct_ref_method TYPE it_ref_seomethod.

  DATA:
  lt_str TYPE it_string,
  lt_redef TYPE STANDARD TABLE OF seoredef.

  FIELD-SYMBOLS:
  <ls_super_class> TYPE st_seo_super_class,
  <ls_ref_method> TYPE st_ref_seomethod,
  <ls_redef> TYPE seoredef.

  LOOP AT it_super_class ASSIGNING <ls_super_class>.
    SELECT * FROM seoredef INTO TABLE lt_redef
      WHERE clsname = <ls_super_class>-clsname
      AND version = '1'.
    LOOP AT lt_redef ASSIGNING <ls_redef>.
      READ TABLE ct_ref_method ASSIGNING <ls_ref_method>
        WITH KEY cpdname = <ls_redef>-mtdname.
      IF sy-subrc = 0.
        IF <ls_super_class>-clsname = i_clsname.
          <ls_ref_method>-inherited = abap_false.
          <ls_ref_method>-redefin = abap_true.
        ENDIF.
        <ls_ref_method>-owner = <ls_redef>-clsname.
        CONCATENATE
          <ls_ref_method>-owner '-'
          <ls_ref_method>-cpdname
          INTO <ls_ref_method>-onclick.
        SPLIT <ls_ref_method>-onclick AT '/' INTO TABLE lt_str.
        LOOP AT lt_str INTO <ls_ref_method>-onclick.
        ENDLOOP.
        CONCATENATE
          'loadIFrame(''IFRAME'', '''
          <ls_ref_method>-onclick '.'
          gc_extension_htm ''');'
          'switchContent(''IFRAME'')'
          INTO <ls_ref_method>-onclick.
        PERFORM replace_all
          USING '~' '-'
          CHANGING <ls_ref_method>-onclick.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "seo_clas_get_methods_redef


*-----------------------------------------------------------------------
* seo_clas_get_props
*-----------------------------------------------------------------------
FORM seo_clas_get_props
  USING
    value(i_clsname)
    value(i_devclass)
  CHANGING
    cs_properties TYPE st_properties
    ct_ti TYPE it_textinput
    ct_typegroup TYPE it_seotypepls.

  DATA:
  ls_clskey TYPE seoclskey,
  ls_extend TYPE vseoextend,
  lt_redefinition TYPE STANDARD TABLE OF seoredef
    WITH KEY clsname refclsname version mtdname,
  ls_relkey TYPE seorelkey,
  ls_vseoclass TYPE vseoclass,
  lt_typegroup TYPE it_seotypepls.

  FIELD-SYMBOLS:
  <ls_typegroup> TYPE seotypepls,
  <l_explicit> TYPE ANY,
  <l_state> TYPE ANY.

  CLEAR:
  cs_properties.

  REFRESH:
  ct_typegroup.

  ls_clskey-clsname = i_clsname.
  CALL FUNCTION 'SEO_CLASS_READ'
    EXPORTING
      clskey  = ls_clskey
      version = '1'
    IMPORTING
      class   = ls_vseoclass.
  IF ls_vseoclass-changedby IS INITIAL
  AND ls_vseoclass-changedon IS INITIAL.
    ls_vseoclass-changedby = ls_vseoclass-author.
    ls_vseoclass-changedon = ls_vseoclass-createdon.
  ENDIF.
  SELECT * FROM seotypepls INTO TABLE lt_typegroup
      WHERE clsname = ls_clskey-clsname
      AND version = '1'
      ORDER BY typegroup.
  LOOP AT lt_typegroup ASSIGNING <ls_typegroup>.
    ASSIGN COMPONENT 'EXPLICIT' OF STRUCTURE <ls_typegroup>
      TO <l_explicit>.
    IF <l_explicit> IS ASSIGNED AND <l_explicit> = abap_true.
      APPEND <ls_typegroup> TO ct_typegroup.
    ENDIF.
  ENDLOOP.
  ls_relkey-clsname = i_clsname.
  CALL FUNCTION 'SEO_INHERITANC_GET'
    EXPORTING
      inhkey        = ls_relkey
      version       = '1'
    IMPORTING
      inheritance   = ls_extend
      redefinitions = lt_redefinition
    EXCEPTIONS
      OTHERS        = 1.
  cs_properties-superclass = ls_extend-refclsname.
  ASSIGN COMPONENT 'STATE' OF STRUCTURE ls_extend TO <l_state>.
  IF <l_state> IS ASSIGNED.
    IF <l_state> = 0.
      cs_properties-check_model_inh = abap_true.
    ENDIF.
  ELSE.
    cs_properties-check_model_inh = abap_undefined.
  ENDIF.
  cs_properties-descript = ls_vseoclass-descript.
  IF ls_vseoclass-clsabstrct = abap_true.
    ls_vseoclass-exposure = 3.
  ENDIF.
  PERFORM get_dom_value_text USING    'SEOCREATE'
                                      ls_vseoclass-exposure
                             CHANGING cs_properties-creatable.
  cs_properties-clsfinal = ls_vseoclass-clsfinal.
  IF ls_vseoclass-langu IS INITIAL.
    SELECT SINGLE masterlang FROM tadir INTO ls_vseoclass-langu
        WHERE pgmid = 'R3TR'
        AND object = 'CLAS'
        AND obj_name = i_clsname.
  ENDIF.

  PERFORM seo_clas_get_props_textinput
    USING
      i_clsname
      i_devclass
      ls_vseoclass
    CHANGING
      ct_ti.
ENDFORM.                    "seo_clas_get_props


*-----------------------------------------------------------------------
* seo_clas_get_props_textInput
*-----------------------------------------------------------------------
FORM seo_clas_get_props_textinput
  USING
    value(i_clsname)
    value(i_devclass)
    is_vseoclass TYPE vseoclass
  CHANGING
    ct_ti TYPE it_textinput.

  DATA:
  l_namtext TYPE ad_namtext,
  ls_ti TYPE st_textinput.

  FIELD-SYMBOLS:
  <l_clssharedmemory> TYPE ANY,
  <l_msg_id> TYPE ANY,
  <l_unicode> TYPE ANY.

  REFRESH:
  ct_ti.

  ls_ti-name = txt_released_internally.
  ls_ti-flag = abap_true.
  IF NOT is_vseoclass-release IS INITIAL.
    ls_ti-value = abap_true.
  ENDIF.
  APPEND ls_ti TO ct_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_fixed_point_arithmetic.
  ls_ti-flag = abap_true.
  ls_ti-flag_col = 1.
  ls_ti-value = is_vseoclass-fixpt.
  APPEND ls_ti TO ct_ti.
  ASSIGN COMPONENT 'UNICODE' OF STRUCTURE is_vseoclass TO <l_unicode>.
  IF <l_unicode> IS ASSIGNED.
    CLEAR ls_ti.
    ls_ti-name = txtt_unicode_checks_active.
    ls_ti-flag = abap_true.
    ls_ti-flag_col = 2.
    ls_ti-value = is_vseoclass-unicode.
    APPEND ls_ti TO ct_ti.
  ENDIF.
  ASSIGN COMPONENT 'CLSSHAREDMEMORY' OF STRUCTURE is_vseoclass
    TO <l_clssharedmemory>.
  IF <l_clssharedmemory> IS ASSIGNED.
    CLEAR ls_ti.
    ls_ti-name = txt_shared_memory_enabled.
    ls_ti-flag = abap_true.
    ls_ti-value = <l_clssharedmemory>.
    APPEND ls_ti TO ct_ti.
  ENDIF.
  ASSIGN COMPONENT 'MSG_ID' OF STRUCTURE is_vseoclass TO <l_msg_id>.
  IF <l_msg_id> IS ASSIGNED.
    CLEAR ls_ti.
    ls_ti-name = txt_message_class.
    ls_ti-value = <l_msg_id>.
    ls_ti-input = abap_true.
    APPEND ls_ti TO ct_ti.
  ENDIF.
  CLEAR ls_ti.
  ls_ti-name = txt_program_status.
  PERFORM get_dom_value_text USING    'RSTAT'
                                      is_vseoclass-rstat
                             CHANGING ls_ti-value.
  ls_ti-input = abap_true.
  APPEND ls_ti TO ct_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_category.
  PERFORM get_dom_value_text USING    'SEOCATEGRY'
                                      is_vseoclass-category
                             CHANGING ls_ti-value.
  ls_ti-input = abap_true.
  APPEND ls_ti TO ct_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_package.
  ls_ti-value = i_devclass.
  ls_ti-input = abap_true.
  APPEND ls_ti TO ct_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_original_language.
  ls_ti-value = is_vseoclass-langu.
  ls_ti-input = abap_true.
  APPEND ls_ti TO ct_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_created_by___1.
  ls_ti-value = is_vseoclass-author.
  PERFORM get_user USING    is_vseoclass-author
                   CHANGING l_namtext.
  ls_ti-value_text = l_namtext.
  ls_ti-has_value_ext = abap_true.
  PERFORM get_date USING    is_vseoclass-createdon
                   CHANGING ls_ti-value_ext.
  ls_ti-input = abap_true.
  APPEND ls_ti TO ct_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_last_changed_by___1.
  ls_ti-value = is_vseoclass-changedby.
  PERFORM get_user USING    is_vseoclass-changedby
                   CHANGING l_namtext.
  ls_ti-value_text = l_namtext.
  ls_ti-has_value_ext = abap_true.
  PERFORM get_date USING    is_vseoclass-changedon
                   CHANGING ls_ti-value_ext.
  ls_ti-input = abap_true.
  APPEND ls_ti TO ct_ti.
ENDFORM.                    "seo_clas_get_props_textInput


*-----------------------------------------------------------------------
* seo_clas_get_text_symbols
*-----------------------------------------------------------------------
FORM seo_clas_get_text_symbols
  USING
    value(i_clsname)
  CHANGING
    ct_text_symbols TYPE it_textpool
    ct_text_symbols_addons TYPE it_textpool_addons.

  DATA:
  l_clsname TYPE seoclsname,
  l_progname TYPE progname,
  ls_text_symbols_addons TYPE st_textpool_addons.

  FIELD-SYMBOLS:
  <ls_text_symbols> TYPE textpool.

  REFRESH:
  ct_text_symbols,
  ct_text_symbols_addons.

  l_clsname = i_clsname.
  PERFORM get_trdir_name
    USING l_clsname 'CP'
    CHANGING l_progname.
  READ TEXTPOOL l_progname INTO ct_text_symbols LANGUAGE sy-langu.
  DELETE ct_text_symbols WHERE id <> 'I'.

  LOOP AT ct_text_symbols ASSIGNING <ls_text_symbols>.
    ls_text_symbols_addons-strlen = strlen(
      <ls_text_symbols>-entry
    ).
    APPEND ls_text_symbols_addons TO ct_text_symbols_addons.
  ENDLOOP.
ENDFORM.                    "seo_clas_get_text_symbols


*-----------------------------------------------------------------------
* seo_clas_get_types
*-----------------------------------------------------------------------
FORM seo_clas_get_types
  USING
    value(i_clsname)
    it_super_class TYPE it_seo_super_class
  CHANGING
    ct_ref_type TYPE it_ref_seotype
    ct_ref_type_par TYPE it_ref_seotype.

  DATA:
  lt_seotype TYPE STANDARD TABLE OF vseotype,
  ls_ref_type TYPE st_ref_seotype,
  l_str TYPE string,
  l_id TYPE string.

  FIELD-SYMBOLS:
  <ls_super_class> TYPE st_seo_super_class,
  <ls_seotype> TYPE vseotype.

  REFRESH:
  ct_ref_type,
  ct_ref_type_par.

  LOOP AT it_super_class ASSIGNING <ls_super_class>.
    SELECT * FROM vseotype INTO TABLE lt_seotype
      WHERE clsname = <ls_super_class>-clsname
      AND langu = sy-langu
      AND version = '1'
      ORDER BY editorder.
    LOOP AT lt_seotype ASSIGNING <ls_seotype>.
      CLEAR ls_ref_type.
      ls_ref_type-cpdname = <ls_seotype>-cmpname.
      ls_ref_type-owner = <ls_super_class>-clsname.
      IF <ls_super_class>-clsname <> i_clsname.
        ls_ref_type-inherited = abap_true.
      ENDIF.
      PERFORM get_dom_value_text
        USING
          'SEOTYPTYPE'
          <ls_seotype>-typtype
        CHANGING
          ls_ref_type-typtype.
      ls_ref_type-type = <ls_seotype>-type.
      l_str = <ls_seotype>-exposure.
      CONDENSE l_str.
      CONCATENATE 'COMPONENTS_' l_str '_' INTO l_str.
      PERFORM get_id
        USING l_str <ls_super_class>-clsname
        CHANGING l_id.
      CONCATENATE 'switchContent(''' l_id ''')'
        INTO ls_ref_type-onclick.
      ls_ref_type-typelink = '->'.
      ls_ref_type-descript = <ls_seotype>-descript.
      PERFORM get_dom_value_text
        USING
          'SEOEXPOSE'
          <ls_seotype>-exposure
        CHANGING
          ls_ref_type-exposure.
      PERFORM seo_get_check_model
        USING <ls_seotype>
        CHANGING ls_ref_type.
      APPEND ls_ref_type TO ct_ref_type_par.
      IF <ls_super_class>-clsname = i_clsname
      OR <ls_seotype>-exposure <> 0.
        APPEND ls_ref_type TO ct_ref_type.
      ENDIF.
    ENDLOOP.
  ENDLOOP.


ENDFORM.                    "seo_clas_get_types


*-----------------------------------------------------------------------
* seo_get_check_model
*-----------------------------------------------------------------------
FORM seo_get_check_model
  USING
    value(is_struc) TYPE any
  CHANGING
    cs_struc TYPE any.

  FIELD-SYMBOLS:
  <l_state> TYPE ANY,
  <l_check_model> TYPE ANY.

  ASSIGN COMPONENT 'STATE' OF STRUCTURE is_struc TO <l_state>.
  ASSIGN COMPONENT 'CHECK_MODEL' OF STRUCTURE cs_struc
    TO <l_check_model>.
  CHECK <l_check_model> IS ASSIGNED.
  IF <l_state> IS ASSIGNED.
    IF <l_state> = 0.
      <l_check_model> = abap_true.
    ELSE.
      <l_check_model> = abap_false.
    ENDIF.
  ELSE.
    <l_check_model> = abap_undefined.
  ENDIF.

ENDFORM.                    "seo_get_check_model


*-----------------------------------------------------------------------
* seo_get_interfaces
*-----------------------------------------------------------------------
FORM seo_get_interfaces
  USING
    value(i_clsname)
    value(i_hierlevel)
  CHANGING
    ct_ref_interface TYPE it_ref_seointerface
    ct_ref_interface_all TYPE it_ref_seointerface.

  DATA:
  l_hierlevel TYPE i,
  lt_metarel TYPE STANDARD TABLE OF seometarel,
  lt_ref_interface TYPE it_ref_seointerface,
  ls_ref_interface TYPE st_ref_seointerface.

  FIELD-SYMBOLS:
  <ls_metarel> TYPE seometarel,
  <ls_ref_interface> TYPE st_ref_seointerface,
  <l_impfinal> TYPE ANY,
  <l_impabstrct> TYPE ANY.

  l_hierlevel = i_hierlevel + 1.

  SELECT * FROM seometarel INTO TABLE lt_metarel
    WHERE clsname = i_clsname
    AND reltype <= 1.
  CLEAR ls_ref_interface.
  LOOP AT lt_metarel ASSIGNING <ls_metarel>.
    READ TABLE ct_ref_interface_all TRANSPORTING NO FIELDS
      WITH KEY refclsname = <ls_metarel>-refclsname.
    IF sy-subrc <> 0.
      ls_ref_interface-refclsname = <ls_metarel>-refclsname.
      ASSIGN COMPONENT 'IMPFINAL' OF STRUCTURE <ls_metarel>
        TO <l_impfinal>.
      IF <l_impfinal> IS ASSIGNED.
        ls_ref_interface-impfinal = <l_impfinal>.
        UNASSIGN <l_impfinal>.
      ELSE.
        ls_ref_interface-impfinal = abap_undefined.
      ENDIF.
      ASSIGN COMPONENT 'IMPABSTRCT' OF STRUCTURE <ls_metarel>
        TO <l_impabstrct>.
      IF <l_impabstrct> IS ASSIGNED.
        ls_ref_interface-impabstrct = <l_impabstrct>.
        UNASSIGN <l_impabstrct>.
      ELSE.
        ls_ref_interface-impabstrct = abap_undefined.
      ENDIF.
      PERFORM seo_get_check_model
        USING <ls_metarel>
        CHANGING ls_ref_interface.
      SELECT SINGLE descript FROM seoclasstx
        INTO ls_ref_interface-descript
        WHERE clsname = ls_ref_interface-refclsname
        AND langu = sy-langu.

      APPEND ls_ref_interface TO ct_ref_interface.
      APPEND ls_ref_interface TO ct_ref_interface_all.

      PERFORM seo_get_interfaces
        USING
          <ls_metarel>-refclsname
          l_hierlevel
        CHANGING
          lt_ref_interface
          ct_ref_interface_all.
    ENDIF.
  ENDLOOP.
  SORT ct_ref_interface_all BY
    hierlevel DESCENDING
    refclsname ASCENDING.
  SORT ct_ref_interface BY refclsname.
ENDFORM.                    "seo_get_interfaces


*-----------------------------------------------------------------------
* seo_get_superClasses
*-----------------------------------------------------------------------
FORM seo_get_superclasses
  USING
    value(i_clsname)
  CHANGING
    ct_super_class TYPE it_seo_super_class.

  DATA:
  ls_clskey TYPE seoclskey,
  ls_clsref TYPE seoclsref,
  ls_super_class TYPE st_seo_super_class,
  l_lines TYPE i.

  FIELD-SYMBOLS:
  <l_class> TYPE seoclsname.

  DESCRIBE TABLE ct_super_class LINES l_lines.
  ls_super_class-clsname = i_clsname.
  ls_super_class-hierlevel = l_lines + 1.
  APPEND ls_super_class TO ct_super_class.

  ls_clskey-clsname = i_clsname.
  CALL FUNCTION 'SEO_CLASS_GET'
    EXPORTING
      clskey     = ls_clskey
      version    = '1'
      state      = '0'
    IMPORTING
      superclass = ls_clsref
    EXCEPTIONS
      OTHERS     = 1.
  IF sy-subrc = 0 AND NOT ls_clsref-refclsname IS INITIAL.
    PERFORM seo_get_superclasses
      USING
        ls_clsref-refclsname
      CHANGING
        ct_super_class.
  ENDIF.
  SORT ct_super_class BY hierlevel DESCENDING.
ENDFORM.                    "seo_get_superClasses


*-----------------------------------------------------------------------
* seo_intf_get_aliases
*-----------------------------------------------------------------------
FORM seo_intf_get_aliases
  USING
    value(i_clsname)
    it_ref_attrib TYPE it_ref_seoattrib
    it_ref_method TYPE it_ref_seomethod
    it_ref_event TYPE it_ref_seoevent
    it_ref_type TYPE it_ref_seotype
  CHANGING
    ct_ref_alias TYPE it_ref_seoalias.

  DATA:
  ls_ref_alias TYPE st_ref_seoalias,
  ls_clskey TYPE seoclskey,
  lt_seoalias TYPE seo_aliases,
  l_cpdname TYPE seocpdname.

  FIELD-SYMBOLS:
  <ls_ref_attrib> TYPE st_ref_seoattrib,
  <ls_ref_method> TYPE st_ref_seomethod,
  <ls_ref_event> TYPE st_ref_seoevent,
  <ls_ref_type> TYPE st_ref_seotype,
  <ls_seoalias> TYPE seoaliases,
  <ls_ref_alias> TYPE st_ref_seoalias.

  REFRESH:
  ct_ref_alias.

  ls_ref_alias-type = txt_attribute.
  LOOP AT it_ref_attrib ASSIGNING <ls_ref_attrib>
    WHERE cpdname CP '*~*'.
    ls_ref_alias-cpdname = <ls_ref_attrib>-cpdname.
    APPEND ls_ref_alias TO ct_ref_alias.
  ENDLOOP.
  ls_ref_alias-type = txt_method.
  LOOP AT it_ref_method ASSIGNING <ls_ref_method>
    WHERE cpdname CP '*~*'.
    ls_ref_alias-cpdname = <ls_ref_method>-cpdname.
    APPEND ls_ref_alias TO ct_ref_alias.
  ENDLOOP.
  ls_ref_alias-type = txt_event.
  LOOP AT it_ref_event ASSIGNING <ls_ref_event>
    WHERE cpdname CP '*~*'.
    ls_ref_alias-cpdname = <ls_ref_event>-cpdname.
    APPEND ls_ref_alias TO ct_ref_alias.
  ENDLOOP.
  ls_ref_alias-type = txt_type___1.
  LOOP AT it_ref_type ASSIGNING <ls_ref_type>
    WHERE cpdname CP '*~*'.
    ls_ref_alias-cpdname = <ls_ref_type>-cpdname.
    APPEND ls_ref_alias TO ct_ref_alias.
  ENDLOOP.

  ls_clskey-clsname = i_clsname.
  CALL FUNCTION 'SEO_ALIASES_GET'
    EXPORTING
      cifkey  = ls_clskey
    CHANGING
      aliases = lt_seoalias.
  LOOP AT lt_seoalias ASSIGNING <ls_seoalias>.
    CONCATENATE
        <ls_seoalias>-refclsname '~'
        <ls_seoalias>-refcmpname
        INTO l_cpdname.
    READ TABLE ct_ref_alias ASSIGNING <ls_ref_alias>
      WITH KEY cpdname = l_cpdname.
    IF sy-subrc = 0.
      <ls_ref_alias>-refcmpname = <ls_seoalias>-cmpname.
    ENDIF.
  ENDLOOP.
  SORT ct_ref_alias BY cpdname.
ENDFORM.                    "seo_intf_get_aliases


*-----------------------------------------------------------------------
* seo_intf_get_attribs
*-----------------------------------------------------------------------
FORM seo_intf_get_attribs
  USING
    value(i_clsname)
    it_ref_interface TYPE it_ref_seointerface
  CHANGING
    ct_ref_attrib TYPE it_ref_seoattrib.

  DATA:
  lt_attrib TYPE STANDARD TABLE OF vseoattrib,
  ls_ref_attrib TYPE st_ref_seoattrib,
  l_id TYPE string.

  FIELD-SYMBOLS:
  <ls_ref_interface> TYPE st_ref_seointerface,
  <ls_attrib> TYPE vseoattrib.

  REFRESH:
  ct_ref_attrib.

  LOOP AT it_ref_interface ASSIGNING <ls_ref_interface>.
    SELECT * FROM vseoattrib INTO TABLE lt_attrib
      WHERE clsname = <ls_ref_interface>-refclsname
      AND langu = sy-langu
      AND version = '1'
      ORDER BY editorder.
    LOOP AT lt_attrib ASSIGNING <ls_attrib>.
      CLEAR ls_ref_attrib.
      IF <ls_attrib>-alias = abap_false.
        ls_ref_attrib-cpdname = <ls_attrib>-cmpname.
        IF <ls_ref_interface>-refclsname <> i_clsname.
          CONCATENATE <ls_ref_interface>-refclsname '~'
            ls_ref_attrib-cpdname INTO ls_ref_attrib-cpdname.
        ENDIF.
        PERFORM seo_get_check_model
          USING <ls_attrib>
          CHANGING ls_ref_attrib.
        PERFORM get_dom_value_text
          USING
            'SEOATTDECL'
            <ls_attrib>-attdecltyp
          CHANGING
            ls_ref_attrib-decltype.
        ls_ref_attrib-attrdonly = <ls_attrib>-attrdonly.
        PERFORM get_dom_value_text
          USING
            'SEOTYPTYPE'
            <ls_attrib>-typtype
          CHANGING
            ls_ref_attrib-typtype.
        ls_ref_attrib-type = <ls_attrib>-type.
        PERFORM get_id
          USING 'COMPONENTS_' <ls_ref_interface>-refclsname
          CHANGING l_id.
        CONCATENATE 'switchContent(''' l_id ''')'
          INTO ls_ref_attrib-onclick.
        ls_ref_attrib-typelink = '->'.
        ls_ref_attrib-descript = <ls_attrib>-descript.
        ls_ref_attrib-attvalue = <ls_attrib>-attvalue.
        APPEND ls_ref_attrib TO ct_ref_attrib.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "seo_intf_get_attribs


*-----------------------------------------------------------------------
* seo_intf_get_events
*-----------------------------------------------------------------------
FORM seo_intf_get_events
  USING
    value(i_clsname)
    it_ref_interface TYPE it_ref_seointerface
  CHANGING
    ct_ref_event TYPE it_ref_seoevent.

  DATA:
  lt_event TYPE STANDARD TABLE OF vseoevent,
  ls_ref_event TYPE st_ref_seoevent,
  ls_cmpkey TYPE seocmpkey,
  ls_event TYPE vseoevent.

  FIELD-SYMBOLS:
  <ls_ref_interface> TYPE st_ref_seointerface,
  <ls_event> TYPE vseoevent.

  REFRESH:
  ct_ref_event.

  LOOP AT it_ref_interface ASSIGNING <ls_ref_interface>.
    SELECT * FROM vseoevent INTO TABLE lt_event
      WHERE clsname = <ls_ref_interface>-refclsname
      AND langu = sy-langu
      AND version = '1'
      ORDER BY editorder.
    CLEAR ls_ref_event.
    LOOP AT lt_event ASSIGNING <ls_event>.
      ls_cmpkey-clsname = <ls_ref_interface>-refclsname.
      ls_cmpkey-cmpname = <ls_event>-cmpname.
      CALL FUNCTION 'SEO_EVENT_GET'
        EXPORTING
          evtkey  = ls_cmpkey
          version = 1
        IMPORTING
          event   = ls_event
        EXCEPTIONS
          OTHERS  = 1.
      IF sy-subrc = 0 AND ls_event-alias = abap_false.
        ls_ref_event-cpdname = ls_event-cmpname.
        IF <ls_ref_interface>-refclsname <> i_clsname.
          CONCATENATE <ls_ref_interface>-refclsname '~'
            ls_ref_event-cpdname INTO ls_ref_event-cpdname.
        ENDIF.
        PERFORM seo_get_check_model
          USING ls_event
          CHANGING ls_ref_event.
        PERFORM get_dom_value_text
          USING
            'SEOEVTDECL'
            ls_event-evtdecltyp
          CHANGING
            ls_ref_event-type.
        ls_ref_event-descript = ls_event-descript.
        APPEND ls_ref_event TO ct_ref_event.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "seo_intf_get_events


*-----------------------------------------------------------------------
* seo_intf_get_methods
*-----------------------------------------------------------------------
FORM seo_intf_get_methods
  USING
    value(i_clsname)
    it_ref_interface TYPE it_ref_seointerface
  CHANGING
    ct_ref_method TYPE it_ref_seomethod.

  DATA:
  lt_method TYPE STANDARD TABLE OF vseomethod,
  ls_ref_method TYPE st_ref_seomethod.

  FIELD-SYMBOLS:
  <ls_ref_interface> TYPE st_ref_seointerface,
  <ls_method> TYPE vseomethod.

  REFRESH:
  ct_ref_method.

  LOOP AT it_ref_interface ASSIGNING <ls_ref_interface>.
    SELECT * FROM vseomethod INTO TABLE lt_method
      WHERE clsname = <ls_ref_interface>-refclsname
      AND langu = sy-langu
      AND version = '1'
      ORDER BY editorder.
    LOOP AT lt_method ASSIGNING <ls_method>.
      CLEAR ls_ref_method.
      IF <ls_method>-alias = abap_false.
        ls_ref_method-cpdname = <ls_method>-cmpname.
        IF <ls_ref_interface>-refclsname <> i_clsname.
          CONCATENATE <ls_ref_interface>-refclsname '~'
            ls_ref_method-cpdname INTO ls_ref_method-cpdname.
        ENDIF.
        PERFORM get_dom_value_text
          USING
            'SEOMTDDECL'
            <ls_method>-mtddecltyp
          CHANGING
            ls_ref_method-type.
        PERFORM seo_get_check_model
          USING <ls_method>
          CHANGING ls_ref_method.
        PERFORM get_dom_value_text
          USING
            'SEOMTDTYPE'
            <ls_method>-mtdtype
          CHANGING
            ls_ref_method-methodtype.
        ls_ref_method-descript = <ls_method>-descript.
        APPEND ls_ref_method TO ct_ref_method.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "seo_intf_get_methods


*-----------------------------------------------------------------------
* seo_intf_get_props
*-----------------------------------------------------------------------
FORM seo_intf_get_props
  USING
    value(i_clsname)
    value(i_devclass)
  CHANGING
    cs_properties TYPE st_properties
    ct_ti TYPE it_textinput
    ct_typegroup TYPE it_seotypepls.

  DATA:
  ls_clskey TYPE seoclskey,
  ls_seointerf TYPE vseointerf,
  lt_typegroup TYPE it_seotypepls.

  FIELD-SYMBOLS:
  <ls_typegroup> TYPE seotypepls,
  <l_explicit> TYPE ANY.

  CLEAR:
  cs_properties.

  REFRESH:
  ct_typegroup.

  ls_clskey-clsname = i_clsname.
  CALL FUNCTION 'SEO_INTERFACE_READ'
    EXPORTING
      intkey    = ls_clskey
      version   = 1
    IMPORTING
      interface = ls_seointerf.
  IF ls_seointerf-changedby IS INITIAL
  AND ls_seointerf-changedon IS INITIAL.
    ls_seointerf-changedby = ls_seointerf-author.
    ls_seointerf-changedon = ls_seointerf-createdon.
  ENDIF.
  SELECT * FROM seotypepls INTO TABLE lt_typegroup
      WHERE clsname = ls_clskey-clsname
      AND version = '1'
      ORDER BY typegroup.
  LOOP AT lt_typegroup ASSIGNING <ls_typegroup>.
    ASSIGN COMPONENT 'EXPLICIT' OF STRUCTURE <ls_typegroup>
      TO <l_explicit>.
    IF <l_explicit> IS ASSIGNED AND <l_explicit> = abap_true.
      APPEND <ls_typegroup> TO ct_typegroup.
    ENDIF.
  ENDLOOP.
  cs_properties-descript = ls_seointerf-descript.
  IF ls_seointerf-langu IS INITIAL.
    SELECT SINGLE masterlang FROM tadir INTO ls_seointerf-langu
        WHERE pgmid = 'R3TR'
        AND object = 'INTF'
        AND obj_name = i_clsname.
  ENDIF.

  PERFORM seo_intf_get_props_textinput
    USING
      i_clsname
      i_devclass
      ls_seointerf
    CHANGING
      ct_ti.
ENDFORM.                    "seo_clas_get_props


*-----------------------------------------------------------------------
* seo_intf_get_props_textInput
*-----------------------------------------------------------------------
FORM seo_intf_get_props_textinput
  USING
    value(i_clsname)
    value(i_devclass)
    is_seointerf TYPE vseointerf
  CHANGING
    ct_ti TYPE it_textinput.

  DATA:
  l_namtext TYPE ad_namtext,
  ls_ti TYPE st_textinput.

  FIELD-SYMBOLS:
  <l_unicode> TYPE ANY.

  REFRESH:
  ct_ti.

  ls_ti-name = txt_released_internally.
  ls_ti-flag = abap_true.
  ls_ti-flag_col = 1.
  IF NOT is_seointerf-release IS INITIAL.
    ls_ti-value = abap_true.
  ENDIF.
  APPEND ls_ti TO ct_ti.
  ASSIGN COMPONENT 'UNICODE' OF STRUCTURE is_seointerf TO <l_unicode>.
  IF <l_unicode> IS ASSIGNED.
    CLEAR ls_ti.
    ls_ti-name = txtt_unicode_checks_active.
    ls_ti-flag = abap_true.
    ls_ti-flag_col = 2.
    ls_ti-value = <l_unicode>.
    APPEND ls_ti TO ct_ti.
  ENDIF.
  CLEAR ls_ti.
  ls_ti-name = txt_package.
  ls_ti-value = i_devclass.
  ls_ti-input = abap_true.
  APPEND ls_ti TO ct_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_original_language.
  ls_ti-value = is_seointerf-langu.
  ls_ti-input = abap_true.
  APPEND ls_ti TO ct_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_created_by___1.
  ls_ti-value = is_seointerf-author.
  PERFORM get_user
    USING
      is_seointerf-author
    CHANGING
      l_namtext.
  ls_ti-value_text = l_namtext.
  ls_ti-has_value_ext = abap_true.
  PERFORM get_date
    USING
      is_seointerf-createdon
    CHANGING
      ls_ti-value_ext.
  ls_ti-input = abap_true.
  APPEND ls_ti TO ct_ti.
  CLEAR ls_ti.
  ls_ti-name = txt_last_changed_by___1.
  ls_ti-value = is_seointerf-changedby.
  PERFORM get_user
    USING
      is_seointerf-changedby
    CHANGING
      l_namtext.
  ls_ti-value_text = l_namtext.
  ls_ti-has_value_ext = abap_true.
  PERFORM get_date
    USING
      is_seointerf-changedon
    CHANGING
      ls_ti-value_ext.
  ls_ti-input = abap_true.
  APPEND ls_ti TO ct_ti.
ENDFORM.                    "seo_intf_get_props_textInput


*-----------------------------------------------------------------------
* seo_intf_get_types
*-----------------------------------------------------------------------
FORM seo_intf_get_types
  USING
    value(i_clsname)
    it_ref_interface TYPE it_ref_seointerface
  CHANGING
    ct_ref_type TYPE it_ref_seotype
    ct_ref_type_par TYPE it_ref_seotype.

  DATA:
  lt_type TYPE STANDARD TABLE OF vseotype,
  ls_ref_type TYPE st_ref_seotype,
  l_id TYPE string.

  FIELD-SYMBOLS:
  <ls_ref_interface> TYPE st_ref_seointerface,
  <ls_type> TYPE vseotype.

  REFRESH:
  ct_ref_type.

  LOOP AT it_ref_interface ASSIGNING <ls_ref_interface>.
    SELECT * FROM vseotype INTO TABLE lt_type
      WHERE clsname = <ls_ref_interface>-refclsname
      AND langu = sy-langu
      AND version = '1'
      ORDER BY editorder.
    CLEAR ls_ref_type.
    LOOP AT lt_type ASSIGNING <ls_type>.
      ls_ref_type-cpdname = <ls_type>-cmpname.
      IF <ls_ref_interface>-refclsname <> i_clsname.
        CONCATENATE <ls_ref_interface>-refclsname '~'
          ls_ref_type-cpdname INTO ls_ref_type-cpdname.
      ENDIF.
      PERFORM get_dom_value_text
        USING
          'SEOTYPTYPE'
          <ls_type>-typtype
        CHANGING
          ls_ref_type-typtype.
      ls_ref_type-type = <ls_type>-type.
      PERFORM get_id
        USING 'COMPONENTS_' <ls_ref_interface>-refclsname
        CHANGING l_id.
      CONCATENATE 'switchContent(''' l_id ''')'
        INTO ls_ref_type-onclick.
      ls_ref_type-typelink = '->'.
      ls_ref_type-descript = <ls_type>-descript.
      APPEND ls_ref_type TO ct_ref_type_par.
      IF <ls_ref_interface>-refclsname = i_clsname.
        APPEND ls_ref_type TO ct_ref_type.
      ENDIF.
    ENDLOOP.
  ENDLOOP.
ENDFORM.                    "seo_intf_get_types


*-----------------------------------------------------------------------
* seo_r3tr_clas                                 Classes
*-----------------------------------------------------------------------
FORM seo_r3tr_clas.

  DATA:
  lt_html TYPE it_string,
  ls_seoclass TYPE seoclass,
  lt_tabstrip TYPE it_tabstrip,
  ls_tabstrip TYPE st_tabstrip,
  lt_typegroup TYPE STANDARD TABLE OF seotypepls,
  ls_properties TYPE st_properties,
  lt_ti TYPE it_textinput,
  lt_super_class TYPE it_seo_super_class,
  lt_ref_interface TYPE it_ref_seointerface,
  lt_ref_interface_all TYPE it_ref_seointerface,
  lt_ref_attrib TYPE it_ref_seoattrib,
  lt_ref_friends TYPE it_ref_seofriends,
  lt_ref_method TYPE it_ref_seomethod,
  lt_ref_event TYPE it_ref_seoevent,
  lt_ref_type TYPE it_ref_seotype,
  lt_ref_type_par TYPE it_ref_seotype,
  lt_ref_alias TYPE it_ref_seoalias,
  l_clsname TYPE seoclsname,
  l_progname TYPE programm,
  lt_doc TYPE it_string,
  lt_text_symbols TYPE it_textpool,
  lt_text_symbols_addons TYPE it_textpool_addons,
  l_javascript TYPE string,
  l_filename TYPE string,
  l_id TYPE string,
  l_flag TYPE flag,
  l_has_cl_name TYPE flag,
  l_char TYPE c.

  FIELD-SYMBOLS:
  <ls_tabstrip> TYPE st_tabstrip,
  <ls_ztadir> TYPE st_ztadir,
  <ls_super_class> TYPE st_seo_super_class.


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

    CLEAR:
    l_javascript,
    ls_tabstrip.

    REFRESH:
    lt_html,
    lt_super_class,
    lt_ref_interface,
    lt_ref_interface_all,
    lt_doc.

    SELECT SINGLE * FROM seoclass INTO ls_seoclass
      WHERE clsname = <ls_ztadir>-obj_name
      AND clstype = 0.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.
*Class Documentation
    PERFORM get_docu
      USING
        'CL'
        <ls_ztadir>-obj_name
        'E'
      CHANGING
        lt_doc.
*Text Symbols
    PERFORM seo_clas_get_text_symbols
      USING
        <ls_ztadir>-obj_name
      CHANGING
        lt_text_symbols
        lt_text_symbols_addons.
*Properties
    PERFORM seo_clas_get_props
      USING
        <ls_ztadir>-obj_name
        <ls_ztadir>-devclass
      CHANGING
        ls_properties
        lt_ti
        lt_typegroup.
*Super classes
    PERFORM seo_get_superclasses
      USING
        <ls_ztadir>-obj_name
      CHANGING
        lt_super_class.
*Interfaces
    PERFORM seo_clas_get_interfaces
      USING
        <ls_ztadir>-obj_name
        lt_super_class
      CHANGING
        lt_ref_interface
        lt_ref_interface_all.
*Friends
    PERFORM seo_clas_get_friends
      USING
        <ls_ztadir>-obj_name
      CHANGING
        lt_ref_friends.
*Attributes
    PERFORM seo_clas_get_attribs
      USING
        <ls_ztadir>-obj_name
        lt_super_class
        lt_ref_interface_all
      CHANGING
        lt_ref_attrib.
*Methods
    PERFORM seo_clas_get_methods
      USING
        <ls_ztadir>
        lt_super_class
        lt_ref_interface_all
      CHANGING
        lt_ref_method.
*Events
    PERFORM seo_clas_get_events
      USING
        <ls_ztadir>-obj_name
        lt_super_class
        lt_ref_interface_all
      CHANGING
        lt_ref_event.
*Types
    PERFORM seo_clas_get_types
      USING
        <ls_ztadir>-obj_name
        lt_super_class
      CHANGING
        lt_ref_type
        lt_ref_type_par.
*Aliases
    PERFORM seo_clas_get_aliases
      USING
        <ls_ztadir>-obj_name
        lt_ref_attrib
        lt_ref_method
        lt_ref_event
        lt_ref_type_par
      CHANGING
        lt_ref_alias.
*   Check CL-name
    l_has_cl_name = abap_false.
    l_clsname = <ls_ztadir>-obj_name.
    PERFORM get_trdir_name
      USING l_clsname 'CL'
      CHANGING l_progname.
    SELECT SINGLE name FROM trdir INTO l_progname
        WHERE name = l_progname.
    IF sy-subrc = 0.
      l_has_cl_name = abap_true.
    ENDIF.
***Tabstrip
    l_char = '-'.
    IF l_has_cl_name = abap_false.
      l_char = 'N'.
    ENDIF.
    PERFORM get_tabstrip
      USING 'SEO_R3TR_CLAS' l_char
      CHANGING lt_tabstrip.

    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'DOC'.
          IF lt_doc IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'TEXTSYMBOLS'.
          IF lt_text_symbols IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'INTERFACES'.
          IF lt_ref_interface IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'FRIENDS'.
          IF lt_ref_friends IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'ATTRIBUTES'.
          IF lt_ref_attrib IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'METHODS'.
          IF lt_ref_method IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'EVENTS'.
          IF lt_ref_event IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'TYPES'.
          IF lt_ref_type IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'ALIASES'.
          IF lt_ref_alias IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
      ENDCASE.
    ENDLOOP.

*Komponenten
    LOOP AT lt_super_class ASSIGNING <ls_super_class>.
*** public Komponenten
      PERFORM get_id
        USING 'COMPONENTS_2_' <ls_super_class>-clsname
        CHANGING ls_tabstrip-id.
      ls_tabstrip-text = space.
      ls_tabstrip-active = abap_false.
      ls_tabstrip-hidden = abap_true.
      APPEND ls_tabstrip TO lt_tabstrip.
      CONCATENATE l_javascript
          'makeDivSize(''' ls_tabstrip-id ''');'
        INTO l_javascript.
*** private Komponenten
      PERFORM get_id
        USING 'COMPONENTS_0_' <ls_super_class>-clsname
        CHANGING ls_tabstrip-id.
      ls_tabstrip-text = space.
      ls_tabstrip-active = abap_false.
      ls_tabstrip-hidden = abap_true.
      APPEND ls_tabstrip TO lt_tabstrip.
      CONCATENATE l_javascript
          'makeDivSize(''' ls_tabstrip-id ''');'
        INTO l_javascript.
*** protected Komponenten
      PERFORM get_id
        USING 'COMPONENTS_1_' <ls_super_class>-clsname
        CHANGING ls_tabstrip-id.
      ls_tabstrip-text = space.
      ls_tabstrip-active = abap_false.
      ls_tabstrip-hidden = abap_true.
      APPEND ls_tabstrip TO lt_tabstrip.
      CONCATENATE l_javascript
          'makeDivSize(''' ls_tabstrip-id ''');'
        INTO l_javascript.
    ENDLOOP.
    ls_tabstrip-id = 'IFRAME'.
    ls_tabstrip-text = space.
    ls_tabstrip-active = abap_false.
    ls_tabstrip-hidden = abap_true.
    APPEND ls_tabstrip TO lt_tabstrip.
*** JavaScript
    CONCATENATE l_javascript
        'makeDivSize(''IFRAME'');'
        'makeDivSize(''LOCTYPES'');'
        'makeDivSize(''IMPL'');'
        'makeDivSize(''MACROS'');'
        'makeDivSize(''DOC'');'
      INTO l_javascript.
*** HTML
    PERFORM html_main_header
      USING
        tpt_seo_clas
        txt_class
        <ls_ztadir>-obj_name
        txt_implemented_active
        space
        space
        l_javascript
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*  Local Types (CL)
    l_clsname = <ls_ztadir>-obj_name.
    IF l_has_cl_name = abap_true.
      PERFORM get_trdir_name
        USING l_clsname 'CL'
        CHANGING l_progname.
      CONCATENATE <ls_ztadir>-obj_name '.cl' INTO l_filename.
      PERFORM add_report_sourcecode
        USING
          l_progname
          l_filename
          gc_extension_txt
          abap_false
          <ls_ztadir>
          'LOCTYPES'
          abap_false
        CHANGING
          lt_html.
    ELSE.
*  Local Types (CCDEF)
      PERFORM get_trdir_name
        USING l_clsname 'CCDEF'
        CHANGING l_progname.
      CONCATENATE <ls_ztadir>-obj_name '.ccdef' INTO l_filename.
      PERFORM add_report_sourcecode
        USING
          l_progname
          l_filename
          gc_extension_txt
          abap_false
          <ls_ztadir>
          'LOCTYPES'
          abap_false
        CHANGING
          lt_html.
*  Implementation (CCIMP)
      PERFORM get_trdir_name
        USING l_clsname 'CCIMP'
        CHANGING l_progname.
      CONCATENATE <ls_ztadir>-obj_name '.ccimp' INTO l_filename.
      PERFORM add_report_sourcecode
        USING
          l_progname
          l_filename
          gc_extension_txt
          abap_false
          <ls_ztadir>
          'IMPL'
          abap_false
        CHANGING
          lt_html.
*  Macros (CCMAC)
      PERFORM get_trdir_name
        USING l_clsname 'CCMAC'
        CHANGING l_progname.
      CONCATENATE <ls_ztadir>-obj_name '.ccmac' INTO l_filename.
      PERFORM add_report_sourcecode
        USING
          l_progname
          l_filename
          gc_extension_txt
          abap_false
          <ls_ztadir>
          'MACROS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  Class 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.
*Text Symbols
    IF NOT lt_text_symbols IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'CLAS_SYMBO'
          lt_text_symbols
          lt_text_symbols_addons
          'TEXTSYMBOLS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  Properties
    l_flag = abap_false.
    IF lt_ref_attrib IS INITIAL
    AND lt_ref_method IS INITIAL.
      l_flag = abap_true.
    ENDIF.
    PERFORM html_add_properties
      USING
        ls_properties
        lt_ti
        'CLAS_TYPEG'
        lt_typegroup
        'PROPERTIES'
        l_flag
      CHANGING
        lt_html.
*  Interfaces
    IF NOT lt_ref_interface IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'CLAS_INTER'
          lt_ref_interface
          lt_ref_interface
          'INTERFACES'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  Friends
    IF NOT lt_ref_friends IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'CLAS_FRIEN'
          lt_ref_friends
          lt_ref_friends
          'FRIENDS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  Attributes
    IF NOT lt_ref_attrib IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      l_flag = abap_false.
      IF lt_ref_method IS INITIAL.
        l_flag = abap_true.
      ENDIF.
      PERFORM html_add_table
        USING
          'CLAS_ATTRI'
          lt_ref_attrib
          lt_ref_attrib
          'ATTRIBUTES'
          l_flag
        CHANGING
          lt_html.
    ENDIF.
*  Methods
    IF NOT lt_ref_method IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'CLAS_METHO'
          lt_ref_method
          lt_ref_method
          'METHODS'
          abap_true
        CHANGING
          lt_html.
    ENDIF.
*  Events
    IF NOT lt_ref_event IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'CLAS_EVENT'
          lt_ref_event
          lt_ref_event
          'EVENTS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  Types
    IF NOT lt_ref_type IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'CLAS_TYPES'
          lt_ref_type
          lt_ref_type
          'TYPES'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
* Aliases
    IF NOT lt_ref_alias IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'CLAS_ALIAS'
          lt_ref_alias
          lt_ref_alias
          'ALIASES'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*SourceCode der Komponenten lesen und in DIV ausgeben
    LOOP AT lt_super_class ASSIGNING <ls_super_class>.
*** public Komponenten
      PERFORM get_trdir_name
        USING <ls_super_class>-clsname 'CU'
        CHANGING l_progname.
      PERFORM get_id
        USING 'COMPONENTS_2_' <ls_super_class>-clsname
        CHANGING l_id.
      CONCATENATE <ls_super_class>-clsname '.public'
          INTO l_filename.
      PERFORM add_report_sourcecode
        USING
          l_progname
          l_filename
          gc_extension_txt
          abap_false
          <ls_ztadir>
          l_id
          abap_false
        CHANGING
          lt_html.
*** private Komponenten
      PERFORM get_trdir_name
        USING <ls_super_class>-clsname 'CI'
        CHANGING l_progname.
      PERFORM get_id
        USING 'COMPONENTS_0_' <ls_super_class>-clsname
        CHANGING l_id.
      CONCATENATE <ls_super_class>-clsname '.private'
          INTO l_filename.
      PERFORM add_report_sourcecode
        USING
          l_progname
          l_filename
          gc_extension_txt
          abap_false
          <ls_ztadir>
          l_id
          abap_false
        CHANGING
          lt_html.
*** protected Komponenten
      PERFORM get_trdir_name
        USING <ls_super_class>-clsname 'CO'
        CHANGING l_progname.
      PERFORM get_id
        USING 'COMPONENTS_1_' <ls_super_class>-clsname
        CHANGING l_id.
      CONCATENATE <ls_super_class>-clsname '.protected'
          INTO l_filename.
      PERFORM add_report_sourcecode
        USING
          l_progname
          l_filename
          gc_extension_txt
          abap_false
          <ls_ztadir>
          l_id
          abap_false
        CHANGING
          lt_html.
    ENDLOOP.
***IFrame for Methods' Sources
    PERFORM html_add_iframe
        USING
          space
          'IFRAME'
          abap_false
        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_clas


*-----------------------------------------------------------------------
* seo_r3tr_clas_methods                         Classes
*-----------------------------------------------------------------------
FORM seo_r3tr_clas_methods.

  DATA:
  lt_ref_signature TYPE it_ref_seosignature,
  ls_ref_signature TYPE st_ref_seosignature,
  ls_cpdkey TYPE seocpdkey,
  lt_vseomepara TYPE STANDARD TABLE OF vseomepara,
  lt_vseoexcep TYPE STANDARD TABLE OF vseoexcep,
  l_progname TYPE program,
  lt_sourcecode TYPE it_string,
  lt_html TYPE it_string,
  l_filename TYPE string,
  l_clsname TYPE seoclsname,
  l_cmpname TYPE seocmpname.

  FIELD-SYMBOLS:
  <ls_vseomepara> TYPE vseomepara,
  <ls_vseoexcep> TYPE vseoexcep,
  <ls_zseomethod> TYPE st_zseomethod.


  LOOP AT gt_zseomethod ASSIGNING <ls_zseomethod>.
    REFRESH lt_html.
    REFRESH lt_ref_signature.
    REFRESH lt_vseomepara.
    REFRESH lt_vseoexcep.
    REFRESH lt_sourcecode.
    CLEAR l_clsname.
    CLEAR l_cmpname.
    CLEAR l_filename.

    IF <ls_zseomethod>-cpdname NA '~'.
      l_clsname = <ls_zseomethod>-clsname.
      l_cmpname = <ls_zseomethod>-cpdname.
    ELSE.
      SPLIT <ls_zseomethod>-cpdname AT '~'
        INTO l_clsname l_cmpname.
    ENDIF.
*read Signature - Parameter
    SELECT * FROM vseomepara INTO TABLE lt_vseomepara
      WHERE clsname = l_clsname
      AND cmpname = l_cmpname
      AND langu = sy-langu
      AND version = '1'
      ORDER BY pardecltyp editorder.
    LOOP AT lt_vseomepara ASSIGNING <ls_vseomepara>.
      CLEAR ls_ref_signature.
      PERFORM get_dom_value_text
        USING
          'SEOPARDECL'
          <ls_vseomepara>-pardecltyp
        CHANGING
          ls_ref_signature-declaration.
      IF <ls_vseomepara>-parpasstyp = 0.
        CONCATENATE 'VALUE(' <ls_vseomepara>-sconame ')'
          INTO ls_ref_signature-parameter SEPARATED BY space.
      ELSE.
        ls_ref_signature-parameter = <ls_vseomepara>-sconame.
      ENDIF.
      PERFORM get_dom_value_text
        USING
          'SEOTYPTYPE'
          <ls_vseomepara>-typtype
        CHANGING
          ls_ref_signature-type.
      CONCATENATE ls_ref_signature-type <ls_vseomepara>-type
        INTO ls_ref_signature-type SEPARATED BY space.
      IF <ls_vseomepara>-paroptionl = abap_true.
        CONCATENATE ls_ref_signature-type '(optional)'
          INTO ls_ref_signature-type SEPARATED BY space.
      ENDIF.
      ls_ref_signature-descript = <ls_vseomepara>-descript.
      APPEND ls_ref_signature TO lt_ref_signature.
    ENDLOOP.
*read Signature - Exceptions
    SELECT * FROM vseoexcep INTO TABLE lt_vseoexcep
      WHERE clsname = l_clsname
      AND cmpname = l_cmpname
      AND langu = sy-langu
      AND version = '1'
      ORDER BY editorder.
    LOOP AT lt_vseoexcep ASSIGNING <ls_vseoexcep>.
      CLEAR ls_ref_signature.
      ls_ref_signature-declaration = txt_exception___1.
      ls_ref_signature-parameter = <ls_vseoexcep>-sconame.
      ls_ref_signature-descript = <ls_vseoexcep>-descript.
      APPEND ls_ref_signature TO lt_ref_signature.
    ENDLOOP.
*read SourceCode
    ls_cpdkey-clsname = <ls_zseomethod>-clsname.
    ls_cpdkey-cpdname = <ls_zseomethod>-cpdname.

    PERFORM get_trdir_name_method_include
      USING ls_cpdkey
      CHANGING l_progname.
    IF NOT l_progname IS INITIAL.
      PERFORM try_read_report
        USING l_progname
        CHANGING lt_sourcecode.
    ENDIF.
*download SourceCode
    IF g_add_sourcecode = abap_true.
      CONCATENATE <ls_zseomethod>-clsname '-'
        <ls_zseomethod>-cpdname
        INTO l_filename.
      PERFORM replace_all
        USING '~' '-'
        CHANGING l_filename.
      PERFORM download
        USING
          lt_sourcecode
          <ls_zseomethod>-pgmid
          <ls_zseomethod>-object
          l_filename
          gc_extension_txt
          abap_false.
    ENDIF.
*HTML
    PERFORM html_main_iframeheader
      USING
        <ls_zseomethod>-cpdname
      CHANGING
        lt_html.
    PERFORM html_add_methodnodiv
      USING
        <ls_zseomethod>-cpdname
        <ls_zseomethod>-active
        txt_method
        'CLAS_SIGNA'
        lt_ref_signature
        lt_ref_signature
        lt_sourcecode
        l_filename
        space
        space
        gc_extension_txt
        'CONTENT'
      CHANGING
        lt_html.
    PERFORM html_main_iframefooter
      CHANGING
        lt_html.
*Download
    CONCATENATE <ls_zseomethod>-clsname '-' <ls_zseomethod>-cpdname
      INTO l_filename.
    PERFORM replace_all
      USING '~' '-'
      CHANGING l_filename.
    PERFORM download
        USING
          lt_html
          <ls_zseomethod>-pgmid
          <ls_zseomethod>-object
          l_filename
          gc_extension_htm
          abap_false.
  ENDLOOP.

ENDFORM.                    "r3tr_clas_methods


*-----------------------------------------------------------------------
* seo_r3tr_intf                                 Interfaces
*-----------------------------------------------------------------------
FORM seo_r3tr_intf.

  DATA:
  lt_html TYPE it_string,
  lt_tabstrip TYPE it_tabstrip,
  ls_tabstrip TYPE st_tabstrip,
  ls_seoclass TYPE seoclass,
  lt_typegroup TYPE STANDARD TABLE OF seotypepls,
  ls_properties TYPE st_properties,
  lt_ti TYPE it_textinput,
  lt_ref_interface TYPE it_ref_seointerface,
  lt_ref_interface_all TYPE it_ref_seointerface,
  ls_ref_interface TYPE st_ref_seointerface,
  lt_ref_attrib TYPE it_ref_seoattrib,
  lt_ref_method TYPE it_ref_seomethod,
  lt_ref_event TYPE it_ref_seoevent,
  lt_ref_type TYPE it_ref_seotype,
  lt_ref_type_par TYPE it_ref_seotype,
  lt_ref_alias TYPE it_ref_seoalias,
  lt_doc TYPE it_string,
  l_progname TYPE programm,
  l_javascript TYPE string,
  l_filename TYPE string,
  l_id TYPE string,
  l_flag.

  FIELD-SYMBOLS:
  <ls_tabstrip> TYPE st_tabstrip,
  <ls_ztadir> TYPE st_ztadir,
  <ls_ref_interface_all> TYPE st_ref_seointerface.


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

    REFRESH:
    lt_html,
    lt_ref_interface,
    lt_ref_interface_all.

    SELECT SINGLE * FROM seoclass INTO ls_seoclass
      WHERE clsname = <ls_ztadir>-obj_name
      AND clstype = 1.
    IF sy-subrc <> 0.
      <ls_ztadir>-subrc = sy-subrc.
      CONTINUE.
    ENDIF.
*Interface Documentation
    PERFORM get_docu
      USING
        'IF'
        <ls_ztadir>-obj_name
        'E'
      CHANGING
        lt_doc.
*Properties
    PERFORM seo_intf_get_props
      USING
        <ls_ztadir>-obj_name
        <ls_ztadir>-devclass
      CHANGING
        ls_properties
        lt_ti
        lt_typegroup.
*Interfaces
    PERFORM seo_get_interfaces
      USING
        <ls_ztadir>-obj_name
        0
      CHANGING
        lt_ref_interface
        lt_ref_interface_all.
    ls_ref_interface-refclsname = <ls_ztadir>-obj_name.
    APPEND ls_ref_interface TO lt_ref_interface_all.
*Attributes
    PERFORM seo_intf_get_attribs
      USING
        <ls_ztadir>-obj_name
        lt_ref_interface_all
      CHANGING
        lt_ref_attrib.
*Methods
    PERFORM seo_intf_get_methods
      USING
        <ls_ztadir>-obj_name
        lt_ref_interface_all
      CHANGING
        lt_ref_method.
*Events
    PERFORM seo_intf_get_events
      USING
        <ls_ztadir>-obj_name
        lt_ref_interface_all
      CHANGING
        lt_ref_event.
*Types
    PERFORM seo_intf_get_types
      USING
        <ls_ztadir>-obj_name
        lt_ref_interface_all
      CHANGING
        lt_ref_type
        lt_ref_type_par.
*Aliases
    PERFORM seo_intf_get_aliases
      USING
        <ls_ztadir>-obj_name
        lt_ref_attrib
        lt_ref_method
        lt_ref_event
        lt_ref_type_par
      CHANGING
        lt_ref_alias.
*** TabStrip
    PERFORM get_tabstrip
      USING 'SEO_R3TR_INTF' space
      CHANGING lt_tabstrip.

    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'DOC'.
          IF lt_doc IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'INTERFACES'.
          IF lt_ref_interface IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'ATTRIBUTES'.
          IF lt_ref_attrib IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'METHODS'.
          IF lt_ref_method IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'EVENTS'.
          IF lt_ref_event IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'TYPES'.
          IF lt_ref_type IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
        WHEN 'ALIASES'.
          IF lt_ref_alias IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
      ENDCASE.
    ENDLOOP.

    LOOP AT lt_ref_interface_all ASSIGNING <ls_ref_interface_all>.
      CLEAR ls_tabstrip.
      PERFORM get_id
        USING 'COMPONENTS_' <ls_ref_interface_all>-refclsname
        CHANGING ls_tabstrip-id.
      ls_tabstrip-hidden = abap_true.
      APPEND ls_tabstrip TO lt_tabstrip.
      PERFORM get_id
        USING 'COMPONENTS_' <ls_ref_interface_all>-refclsname
        CHANGING l_id.
      CONCATENATE l_javascript 'makeDivSize(''' l_id ''');'
        INTO l_javascript.
    ENDLOOP.
*** HTML
    PERFORM html_main_header
      USING
        tpt_seo_intf
        txt_interface
        <ls_ztadir>-obj_name
        txt_implemented_active
        space
        space
        l_javascript
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*  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.
*  Properties
    l_flag = abap_false.
    IF lt_ref_method IS INITIAL
    AND lt_ref_attrib IS INITIAL.
      l_flag = abap_true.
    ENDIF.
    PERFORM html_add_properties
      USING
        ls_properties
        lt_ti
        'INTF_TYPEG'
        lt_typegroup
        'PROPERTIES'
        l_flag
      CHANGING
        lt_html.
*  Interfaces
    IF NOT lt_ref_interface IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'INTF_INTER'
          lt_ref_interface
          lt_ref_interface
          'INTERFACES'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  Attributes
    IF NOT lt_ref_attrib IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      l_flag = abap_false.
      IF lt_ref_method IS INITIAL.
        l_flag = abap_true.
      ENDIF.
      PERFORM html_add_table
        USING
          'INTF_ATTRI'
          lt_ref_attrib
          lt_ref_attrib
          'ATTRIBUTES'
          l_flag
        CHANGING
          lt_html.
    ENDIF.
*  Methods
    IF NOT lt_ref_method IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'INTF_METHO'
          lt_ref_method
          lt_ref_method
          'METHODS'
          abap_true
        CHANGING
          lt_html.
    ENDIF.
*  Events
    IF NOT lt_ref_event IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'INTF_EVENT'
          lt_ref_event
          lt_ref_event
          'EVENTS'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  Types
    IF NOT lt_ref_type IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'INTF_TYPES'
          lt_ref_type
          lt_ref_type
          'TYPES'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
*  Aliases
    IF NOT lt_ref_alias IS INITIAL
    OR g_empty_tab = gc_empty_tab_display.
      PERFORM html_add_table
        USING
          'INTF_ALIAS'
          lt_ref_alias
          lt_ref_alias
          'ALIASES'
          abap_false
        CHANGING
          lt_html.
    ENDIF.
    LOOP AT lt_ref_interface_all ASSIGNING <ls_ref_interface_all>.
      PERFORM get_trdir_name
        USING <ls_ref_interface_all>-refclsname 'IU'
        CHANGING l_progname.
      PERFORM get_id
        USING 'COMPONENTS_' <ls_ref_interface_all>-refclsname
        CHANGING l_id.
      CONCATENATE <ls_ref_interface_all>-refclsname '.components'
          INTO l_filename.
      PERFORM add_report_sourcecode
        USING
          l_progname
          l_filename
          gc_extension_txt
          abap_false
          <ls_ztadir>
          l_id
          abap_false
        CHANGING
          lt_html.
    ENDLOOP.
    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_intf
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_SYSTEM                                 *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* system
*-----------------------------------------------------------------------
FORM system.
*System: Component Information
  PERFORM system_component.
*System: Kernel Information
  PERFORM system_kernel.
*System: Status
  PERFORM system_status.

ENDFORM.                    "system


*-----------------------------------------------------------------------
* component                                     System Component Info
*-----------------------------------------------------------------------
FORM system_component.

  DATA:
  lt_component TYPE it_component,
  ls_component TYPE st_component,
  lt_cvers TYPE STANDARD TABLE OF cvers,
  lt_html TYPE it_string.

  FIELD-SYMBOLS:
  <ls_cvers> TYPE cvers.

  SELECT * FROM cvers INTO TABLE lt_cvers.
  LOOP AT lt_cvers ASSIGNING <ls_cvers>.
    CLEAR ls_component.
    ls_component-component = <ls_cvers>-component.
    ls_component-release = <ls_cvers>-release.
    CALL FUNCTION 'OCS_GET_COMPONENT_STATE'
      EXPORTING
        iv_component  = <ls_cvers>-component
      IMPORTING
        ev_comp_level = ls_component-level
        ev_last_patch = ls_component-high_package
      EXCEPTIONS
        OTHERS        = 1.
    SELECT SINGLE desc_text FROM cvers_ref INTO ls_component-desc_text
        WHERE component = <ls_cvers>-component
        AND langu = sy-langu.
    APPEND ls_component TO lt_component.
  ENDLOOP.

*HTML
  PERFORM html_main_popupheader
    USING
      txt_component_information
    CHANGING
      lt_html.
* Content
  PERFORM html_add_tablenodiv
    USING
      'MENU_COMPO'
      lt_component
      lt_component
    CHANGING
      lt_html.
* Footer
  PERFORM html_main_popupfooter
    CHANGING lt_html.
*Download
  PERFORM download
    USING
      lt_html
      'MENU'
      'SYSTEM'
      'COMPONENT'
      gc_extension_htm
      abap_false.

ENDFORM.                    "system_component


*-----------------------------------------------------------------------
* kernel                                        System Kernel Info
*-----------------------------------------------------------------------
FORM system_kernel.

  DATA:
  ls_textinput TYPE st_textinput,
  lt_kernel TYPE it_textinput,
  lt_database TYPE it_textinput,
  lt_system TYPE it_textinput,
  lt_html TYPE it_string,
  ls_dbinfo TYPE dbrelinfo.

  FIELD-SYMBOLS:
  <l_patchlevel> TYPE ANY.

  CALL FUNCTION 'DB_DBRELINFO'
    IMPORTING
      dbinfo = ls_dbinfo.

*Kernel information
* Kernel release
  CLEAR ls_textinput.
  ls_textinput-name = txt_kernel_release.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'kernel release'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_kernel.
* Compilation
  CLEAR ls_textinput.
  ls_textinput-name = txt_compilation.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'kernel compiled'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_kernel.
* Sup.Pkg lvl.
  CLEAR ls_textinput.
  ls_textinput-name = txt_sup_pkg_lvl.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'kernel patch level'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_kernel.
* ABAP Load
  CLEAR ls_textinput.
  ls_textinput-name = txt_abap_load.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'ABAP load version'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_kernel.
* CUA load
  CLEAR ls_textinput.
  ls_textinput-name = txt_cua_load.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'CUA load version'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_kernel.
* Mode
  CLEAR ls_textinput.
  ls_textinput-name = txt_mode.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'kernel kind'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_kernel.
* Rsyn file
  CLEAR ls_textinput.
  ls_textinput-name = txt_rsyn_file.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'rsyn'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_kernel.

*Database information
* DB client lib.
  CLEAR ls_textinput.
  ls_textinput-name = txt_db_client_lib.
  ls_textinput-input = abap_true.
  ls_textinput-value = ls_dbinfo-clirel.
  APPEND ls_textinput TO lt_database.
* DB releases
  CLEAR ls_textinput.
  ls_textinput-name = txt_db_releases.
  ls_textinput-input = abap_true.
  ls_textinput-value = ls_dbinfo-releases.
  APPEND ls_textinput TO lt_database.
* DBSL version
  CLEAR ls_textinput.
  ls_textinput-name = txt_dbsl_version.
  ls_textinput-input = abap_true.
  ls_textinput-value = ls_dbinfo-dbsl_vers.
  APPEND ls_textinput TO lt_database.
* DBSL Patch Level
  ASSIGN COMPONENT 'PATCHLEVEL' OF STRUCTURE ls_dbinfo
    TO <l_patchlevel>.
  IF <l_patchlevel> IS ASSIGNED.
    CLEAR ls_textinput.
    ls_textinput-name = txt_dbsl_patch_level.
    ls_textinput-input = abap_true.
    ls_textinput-value = <l_patchlevel>.
    APPEND ls_textinput TO lt_database.
  ENDIF.

*System information
* IP address
  CLEAR ls_textinput.
  ls_textinput-name = txt_ip_address.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'IP address'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_system.
* SAP versions
  CLEAR ls_textinput.
  ls_textinput-name = txt_sap_versions.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'supported SAP vers.'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_system.
* Operating System
  CLEAR ls_textinput.
  ls_textinput-name = txt_operating_system.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'valid OP system'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_system.
* OP release
  CLEAR ls_textinput.
  ls_textinput-name = txt_op_release.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'OP system release'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_system.

*HTML
  PERFORM html_main_popupheader
    USING
      txt_component_information
    CHANGING
      lt_html.
* Content
  PERFORM html_add_box1ti_2tivernodiv
    USING
      txt_kernel_information___2
      lt_kernel
      txt_database_information
      lt_database
      txt_system_information
      lt_system
    CHANGING
      lt_html.
* Footer
  PERFORM html_main_popupfooter
    CHANGING lt_html.
*Download
  PERFORM download
    USING
      lt_html
      'MENU'
      'SYSTEM'
      'KERNEL'
      gc_extension_htm
      abap_false.

ENDFORM.                    "system_kernel


*-----------------------------------------------------------------------
* status                                        System Status
*-----------------------------------------------------------------------
FORM system_status.

  DATA:
  ls_textinput TYPE st_textinput,
  lt_usage_data_r TYPE it_textinput,
  lt_usage_data_l TYPE it_textinput,
  lt_repository_data TYPE it_textinput,
  lt_sap_system_data TYPE it_textinput,
  lt_host_data TYPE it_textinput,
  lt_database_data TYPE it_textinput,
  lt_html TYPE it_string,
  ls_last_logon TYPE st_last_logon,
  l_name TYPE ad_namtext,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt,
  l_title TYPE rs38m-repti,
  l_date TYPE sydatum,
  l_db_release(10) TYPE c,
  l_servername(40) TYPE c,
  l_unicode TYPE c,
  l_exists TYPE flag,
  l_ttext TYPE ttext_stct,
  l_stext(40) TYPE c,
  l_repid TYPE syrepid,
  lt_list TYPE STANDARD TABLE OF msxxlist.

  FIELD-SYMBOLS:
  <ls_list> TYPE msxxlist.

*Last logon
  GET PARAMETER ID 'US2' FIELD ls_last_logon.

*Usage data
* Client
  CLEAR ls_textinput.
  ls_textinput-name = txt_client.
  ls_textinput-input = abap_true.
  ls_textinput-value = sy-mandt.
  APPEND ls_textinput TO lt_usage_data_l.
* User
  CLEAR ls_textinput.
  ls_textinput-name = txt_user.
  ls_textinput-input = abap_true.
  ls_textinput-value = sy-uname.
  PERFORM get_user
    USING sy-uname
    CHANGING l_name.
  ls_textinput-value_text = l_name.
  APPEND ls_textinput TO lt_usage_data_l.
* Language
  CLEAR ls_textinput.
  ls_textinput-name = txt_language.
  ls_textinput-input = abap_true.
  PERFORM get_spras
    USING sy-langu
    CHANGING l_laiso l_sptxt.
  ls_textinput-value = l_laiso.
  ls_textinput-value_text = l_sptxt.
  APPEND ls_textinput TO lt_usage_data_l.
* Previous logon
  CLEAR ls_textinput.
  ls_textinput-name = txt_previous_logon.
  ls_textinput-input = abap_true.
  ls_textinput-has_value_ext = abap_true.
  PERFORM get_date
    USING ls_last_logon-date
    CHANGING ls_textinput-value.
  PERFORM get_time
    USING ls_last_logon-time
    CHANGING ls_textinput-value_ext.
  APPEND ls_textinput TO lt_usage_data_r.
* Logon
  CLEAR ls_textinput.
  ls_textinput-name = txt_logon.
  ls_textinput-input = abap_true.
  ls_textinput-has_value_ext = abap_true.
  PERFORM get_date
    USING ls_last_logon-date_now
    CHANGING ls_textinput-value.
  PERFORM get_time
    USING ls_last_logon-time_now
    CHANGING ls_textinput-value_ext.
  APPEND ls_textinput TO lt_usage_data_r.
* System time
  CLEAR ls_textinput.
  ls_textinput-name = txt_system_time.
  ls_textinput-input = abap_true.
  ls_textinput-has_value_ext = abap_true.
  PERFORM get_date
    USING sy-datum
    CHANGING ls_textinput-value.
  PERFORM get_time
    USING sy-uzeit
    CHANGING ls_textinput-value_ext.
  APPEND ls_textinput TO lt_usage_data_r.

*SAP data - Repository data
  l_repid = sy-repid.
* Transition
  CLEAR ls_textinput.
  ls_textinput-name = txt_transaction.
  ls_textinput-input = abap_true.
  ls_textinput-value = sy-tcode.
  SELECT SINGLE ttext FROM tstct INTO l_ttext
    WHERE sprsl = sy-langu
    AND tcode = sy-tcode.
  ls_textinput-value_text = l_ttext.
  APPEND ls_textinput TO lt_repository_data.
* Program (screen)
  CLEAR ls_textinput.
  ls_textinput-name = txt_program_screen.
  ls_textinput-input = abap_true.
  ls_textinput-value = l_repid.
  CALL FUNCTION 'PROGRAM_TITLE'
    EXPORTING
      program  = l_repid
      language = sy-langu
    IMPORTING
      title    = l_title.
  ls_textinput-value_text = l_title.
  APPEND ls_textinput TO lt_repository_data.
* Screen number
  CLEAR ls_textinput.
  ls_textinput-name = txt_screen_number.
  ls_textinput-input = abap_true.
  ls_textinput-value = sy-dynnr.
  APPEND ls_textinput TO lt_repository_data.
* Program (GUI)
  CLEAR ls_textinput.
  ls_textinput-name = txt_program_gui.
  ls_textinput-input = abap_true.
  ls_textinput-value = l_repid.
  CALL FUNCTION 'PROGRAM_TITLE'
    EXPORTING
      program  = l_repid
      language = sy-langu
    IMPORTING
      title    = l_title.
  ls_textinput-value_text = l_title.
  APPEND ls_textinput TO lt_repository_data.
* GUI status
  CLEAR ls_textinput.
  ls_textinput-name = txt_gui_status.
  ls_textinput-input = abap_true.
  ls_textinput-value = sy-pfkey.
  APPEND ls_textinput TO lt_repository_data.

*SAP data - SAP System data
* Component version
  CLEAR ls_textinput.
  ls_textinput-name = txt_component_version.
  ls_textinput-input = abap_true.
  SELECT SINGLE stext FROM cvers_txt INTO l_stext
    WHERE langu = sy-langu.
  IF sy-subrc <> 0.
    SELECT SINGLE stext FROM cvers_txt INTO l_stext
      WHERE langu = 'EN'.
  ENDIF.
  ls_textinput-value = l_stext.
  APPEND ls_textinput TO lt_sap_system_data.
* Space row
  CLEAR ls_textinput.
  ls_textinput-space = abap_true.
  APPEND ls_textinput TO lt_sap_system_data.
* Installation number
  CLEAR ls_textinput.
  ls_textinput-name = txt_installation_number.
  ls_textinput-input = abap_true.
  CALL FUNCTION 'SLIC_GET_LICENCE_NUMBER'
    IMPORTING
      license_number = ls_textinput-value.
  APPEND ls_textinput TO lt_sap_system_data.
* License expiration
  CLEAR ls_textinput.
  ls_textinput-name = txt_license_expiration.
  ls_textinput-input = abap_true.
  CALL FUNCTION 'SLIC_GET_LICENCE_DATE'
    IMPORTING
      licence_date = l_date.
  PERFORM get_date
    USING l_date
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_sap_system_data.
* Unicode System
  PERFORM get_fuba_exists
    USING 'SLDAG_CHECK_FOR_UNICODE'
    CHANGING l_exists.
  IF l_exists = abap_true.
    CLEAR ls_textinput.
    ls_textinput-name = txt_unicode_system.
    ls_textinput-input = abap_true.
    CALL FUNCTION 'SLDAG_CHECK_FOR_UNICODE'
      IMPORTING
        unicode = l_unicode.
    IF l_unicode = 1.
      ls_textinput-value = txt_yes.
    ELSE.
      ls_textinput-value = txt_no.
    ENDIF.
    APPEND ls_textinput TO lt_sap_system_data.
  ENDIF.

*Host data
* Operating system
  CLEAR ls_textinput.
  ls_textinput-name = txt_operating_system.
  ls_textinput-input = abap_true.
  ls_textinput-value = sy-opsys.
  APPEND ls_textinput TO lt_host_data.
* Machine type
  CLEAR ls_textinput.
  ls_textinput-name = txt_machine_type.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'machine type'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_host_data.
* Server name
  CLEAR ls_textinput.
  ls_textinput-name = txt_server_name.
  ls_textinput-input = abap_true.
***
  CALL FUNCTION 'TH_SERVER_LIST'
    TABLES
      list   = lt_list
    EXCEPTIONS
      OTHERS = 1.
  READ TABLE lt_list ASSIGNING <ls_list> INDEX 1.
  IF <ls_list> IS ASSIGNED.
    l_servername = <ls_list>-name.
  ELSE.
*  call 'C_SAPGPARAM'
*    id 'NAME'  field 'rdisp/myname'
*    id 'VALUE' field l_servername.
*  if sy-subrc <> 0.
    CLEAR l_servername.
  ENDIF.
  ls_textinput-value = l_servername.
  APPEND ls_textinput TO lt_host_data.
* Platform ID
  CLEAR ls_textinput.
  ls_textinput-name = txt_platform_id.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'SAP system id'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_host_data.

*Database data
* Database system
  CLEAR ls_textinput.
  ls_textinput-name = txt_database_system.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'database system'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_database_data.
* Release
  CLEAR ls_textinput.
  ls_textinput-name = txt_release.
  ls_textinput-input = abap_true.
  CALL FUNCTION 'DB_GET_RELEASE'
    IMPORTING
      release = l_db_release.
  ls_textinput-value = l_db_release.
  APPEND ls_textinput TO lt_database_data.
* Name
  CLEAR ls_textinput.
  ls_textinput-name = txt_name.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'database name'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_database_data.
* Host
  CLEAR ls_textinput.
  ls_textinput-name = txt_host.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'database host'
    CHANGING ls_textinput-value.
  ls_textinput-value = sy-host.
  TRANSLATE ls_textinput-value TO UPPER CASE.
  APPEND ls_textinput TO lt_database_data.
* Owner
  CLEAR ls_textinput.
  ls_textinput-name = txt_owner.
  ls_textinput-input = abap_true.
  PERFORM get_version_info
    USING 'database owner'
    CHANGING ls_textinput-value.
  APPEND ls_textinput TO lt_database_data.

*HTML
  PERFORM html_main_popupheader
    USING
      txt_status
    CHANGING
      lt_html.
* Content
  PERFORM html_add_box1tidbl_box2ti_2tix
    USING
      txt_usage_data
      lt_usage_data_l
      lt_usage_data_r
      txt_sap_data
      txt_repository_data
      txt_sap_system_data
      lt_repository_data
      lt_sap_system_data
      txt_host_data
      txt_database_data
      lt_host_data
      lt_database_data
    CHANGING
      lt_html.
* Footer
  PERFORM html_main_popupfooter
    CHANGING lt_html.
*Download
  PERFORM download
    USING
      lt_html
      'MENU'
      'SYSTEM'
      'STATUS'
      gc_extension_htm
      abap_false.

ENDFORM.                    "system_status
*&---------------------------------------------------------------------*
*&  Include           ZSOFTCOPY_T                                      *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*& 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       *
*&                                                                     *
*&---------------------------------------------------------------------*


*-----------------------------------------------------------------------
* t
*-----------------------------------------------------------------------
FORM t.
*Message Classes
  PERFORM t_r3tr_msag.
*Authorization Oject
  PERFORM t_r3tr_tobj.
*SET/GET Parameters
  PERFORM t_r3tr_para.
*Transactions
  PERFORM t_r3tr_tran.
ENDFORM.                    "t


*-----------------------------------------------------------------------
* t_r3tr_msag                                   Message Classes
*-----------------------------------------------------------------------
FORM t_r3tr_msag.

  DATA:
  ls_ti TYPE st_textinput,
  lt_attr TYPE it_textinput,
  lt_box TYPE it_textinput,
  l_arbgb TYPE arbgb,
  l_bname TYPE xubname,
  l_name_text TYPE ad_namtext,
  ls_t100a TYPE t100a,
  l_laiso TYPE laiso,
  l_sptxt TYPE sptxt,
  lt_html TYPE it_string,
  ls_tabstrip TYPE st_tabstrip,
  lt_tabstrip TYPE it_tabstrip,
  lt_t100 TYPE STANDARD TABLE OF t100,
  ls_t100ext TYPE st_t100ext,
  lt_t100ext TYPE it_t100ext,
  lt_doc TYPE it_string.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_t100> TYPE t100,
  <ls_t100ext> TYPE st_t100ext.

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

    CLEAR:
    ls_ti,
    ls_t100a.

    REFRESH:
    lt_attr,
    lt_box,
    lt_html,
    lt_t100,
    lt_t100ext,
    lt_tabstrip,
    lt_doc.

    l_arbgb = <ls_ztadir>-obj_name.

    SELECT SINGLE * FROM t100a INTO ls_t100a
        WHERE arbgb = l_arbgb.
*TabStrip
    PERFORM get_tabstrip
      USING 'T_R3TR_MSAG' space
      CHANGING lt_tabstrip.
*Attributes
*   Package
    CLEAR ls_ti.
    ls_ti-name = txt_package.
    ls_ti-value = <ls_ztadir>-devclass.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_attr.
*   Last changed by
    CLEAR ls_ti.
    ls_ti-name = txt_last_changed_by___3.
    ls_ti-value = ls_t100a-lastuser.
    l_bname = ls_t100a-lastuser.
    PERFORM get_user
      USING l_bname
      CHANGING l_name_text.
    ls_ti-value_text = l_name_text.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_attr.
*   Changed on
    CLEAR ls_ti.
    ls_ti-name = txt_changed_on.
    PERFORM get_date
      USING
        ls_t100a-ldate
      CHANGING
        ls_ti-value.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_attr.
*   Last changed at
    CLEAR ls_ti.
    ls_ti-name = txt_last_changed_at.
    PERFORM get_time
      USING
        ls_t100a-ltime
      CHANGING
        ls_ti-value.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_attr.
*Attributes - Box
*   Original lang.
    CLEAR ls_ti.
    ls_ti-name = txt_original_lang.
    PERFORM get_spras
      USING ls_t100a-masterlang
      CHANGING l_laiso l_sptxt.
    ls_ti-value = l_laiso.
    ls_ti-value_text = l_sptxt.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_box.
*   Person respons.
    CLEAR ls_ti.
    ls_ti-name = txt_person_respons.
    ls_ti-value = ls_t100a-respuser.
    l_bname = ls_t100a-respuser.
    PERFORM get_user
      USING l_bname
      CHANGING l_name_text.
    ls_ti-value_text = l_name_text.
    ls_ti-value_ext_space = abap_true.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_box.
*   Short text
    CLEAR ls_ti.
    ls_ti-name = txt_short_text___1.
    ls_ti-value = <ls_ztadir>-descript.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_box.
*Messages
    SELECT * FROM t100 INTO TABLE lt_t100
        WHERE arbgb = l_arbgb
        AND sprsl = sy-langu.
    LOOP AT lt_t100 ASSIGNING <ls_t100>.
      CLEAR ls_t100ext.
*     T100U
      SELECT SINGLE name datum FROM t100u
          INTO (ls_t100ext-name,ls_t100ext-datum)
          WHERE arbgb = <ls_t100>-arbgb
          AND msgnr = <ls_t100>-msgnr.
      l_bname = ls_t100ext-name.
      IF NOT l_bname IS INITIAL.
        PERFORM get_user
          USING l_bname
          CHANGING ls_t100ext-name_text.
        PERFORM get_date
          USING ls_t100ext-datum
          CHANGING ls_t100ext-datum_text.
      ENDIF.
*     Documentation
      CALL FUNCTION 'DOCU_OBJECT_NAME_CONCATENATE'
        EXPORTING
          docu_id  = 'NA'
          element  = <ls_t100>-arbgb
          addition = <ls_t100>-msgnr
        IMPORTING
          object   = ls_t100ext-object_name
        EXCEPTIONS
          OTHERS   = 0.
      CALL FUNCTION 'DOCU_SELFDEF_READ'
        EXPORTING
          object_id   = 'NA'
          object_name = ls_t100ext-object_name
        IMPORTING
          selfdef     = ls_t100ext-selfdef
        EXCEPTIONS
          OTHERS      = 0.
      IF NOT ls_t100ext-selfdef IS INITIAL.
        ls_t100ext-no_docu = abap_true.
      ELSE.
        ls_t100ext-ltext = '-->'.
        CONCATENATE 'switchContent(''' ls_t100ext-object_name ''')'
            INTO ls_t100ext-ltext_onclick.
        CLEAR ls_tabstrip.
        ls_tabstrip-id = ls_t100ext-object_name.
        ls_tabstrip-hidden = abap_true.
        APPEND ls_tabstrip TO lt_tabstrip.
      ENDIF.
      APPEND ls_t100ext TO lt_t100ext.
    ENDLOOP.
*HTML
    PERFORM html_main_header
      USING
        tpt_msag
        txt_message_class
        <ls_ztadir>-obj_name
        txt_active___1
        space
        space
        space
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*   Attributes
    PERFORM html_add_textinput_subbox
      USING
        lt_attr
        txt_attributes___2
        lt_box
        'ATTRIBUTES'
        abap_true
      CHANGING
        lt_html.
*   Messages
    PERFORM html_add_table
      USING
        'MSAG_MESS'
        lt_t100
        lt_t100ext
        'MESSAGES'
        abap_false
      CHANGING
        lt_html.
*   Documentation
    LOOP AT lt_t100ext ASSIGNING <ls_t100ext>
        WHERE no_docu = abap_false.
      PERFORM get_docu
        USING
          'NA'
          <ls_t100ext>-object_name
          'E'
        CHANGING
          lt_doc.
      PERFORM html_add_doc
        USING
          lt_doc
          <ls_t100ext>-object_name
          abap_false
        CHANGING
          lt_html.
    ENDLOOP.
*
    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.
    <ls_ztadir>-downloaded = abap_true.
  ENDLOOP.

ENDFORM.                                                    "r3tr_msag


*-----------------------------------------------------------------------
* t_r3tr_tobj                                   Authorization Object
*-----------------------------------------------------------------------
FORM t_r3tr_tobj.

  DATA:
  l_objct TYPE xuobject,
  ls_tobj TYPE tobj,
  ls_ti TYPE st_textinput,
  lt_attr TYPE it_textinput,
  lt_box TYPE it_textinput,
  lt_actvt_attr TYPE it_textinput,
  lt_actvt TYPE it_textinput,
  lt_tactz TYPE STANDARD TABLE OF tactz,
  l_xutxt TYPE xutxt30,
  lt_html TYPE it_string,
  l_ctext TYPE xutext,
  l_bname TYPE xubname,
  l_name_text TYPE ad_namtext,
  l_field TYPE tobj-fiel1,
  l_text TYPE as4text,
  l_has_actvt TYPE flag,
  lt_doc TYPE it_string,
  lt_tabstrip TYPE it_tabstrip,
  l_javascript TYPE string.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_tactz> TYPE tactz,
  <ls_tabstrip> TYPE st_tabstrip.

*TabStrip
  PERFORM get_tabstrip
    USING 'T_R3TR_TOBJ' space
    CHANGING lt_tabstrip.

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

    CLEAR:
    l_objct,
    ls_tobj,
    ls_ti,
    l_ctext,
    l_bname,
    l_name_text,
    l_has_actvt,
    l_javascript.

    REFRESH:
    lt_attr,
    lt_box,
    lt_actvt_attr,
    lt_actvt,
    lt_tactz,
    lt_doc,
    lt_html.

    l_objct = <ls_ztadir>-obj_name.

    SELECT SINGLE * FROM tobj INTO ls_tobj
        WHERE objct = l_objct.

    SELECT SINGLE ctext FROM tobct INTO l_ctext
        WHERE oclss = ls_tobj-oclss
        AND langu = sy-langu.

*Attributes
*   Class
    CLEAR ls_ti.
    ls_ti-name = txt_class.
    ls_ti-value = ls_tobj-oclss.
    ls_ti-value_ext = l_ctext.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    APPEND ls_ti TO lt_attr.
*   Author
    CLEAR ls_ti.
    ls_ti-name = txt_autor.
    ls_ti-value = ls_tobj-bname.
    l_bname = ls_tobj-bname.
    PERFORM get_user
      USING l_bname
      CHANGING l_name_text.
    ls_ti-value_text = l_name_text.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_attr.
*Attributes - Box
    DO 10 TIMES VARYING l_field
        FROM ls_tobj-fiel1 NEXT ls_tobj-fiel2.
      CLEAR:
      l_text,
      ls_ti.
      IF NOT l_field IS INITIAL.
        IF l_field = 'ACTVT'.
          l_has_actvt = abap_true.
        ENDIF.
        CALL FUNCTION 'AUTH_FIELD_GET_INFO'
          EXPORTING
            fieldname = l_field
          IMPORTING
            text      = l_text.
      ENDIF.
      ls_ti-value = l_field.
      ls_ti-value_ext = l_text.
      ls_ti-has_value_ext = abap_true.
      ls_ti-no_name = abap_true.
      ls_ti-input = abap_true.
      APPEND ls_ti TO lt_box.
    ENDDO.
*Documentation
    PERFORM get_docu
      USING
        'UO'
        l_objct
        'E'
      CHANGING
        lt_doc.
*Activities
    SELECT * FROM tactz INTO TABLE lt_tactz
        WHERE brobj = l_objct.
    SORT lt_tactz BY actvt.
    LOOP AT lt_tactz ASSIGNING <ls_tactz>.
      SELECT SINGLE ltext FROM tactt INTO l_xutxt
          WHERE actvt = <ls_tactz>-actvt
          AND spras = sy-langu.
      CLEAR ls_ti.
      ls_ti-name = <ls_tactz>-actvt.
      ls_ti-value = abap_true.
      ls_ti-flag = abap_true.
      ls_ti-description = l_xutxt.
      APPEND ls_ti TO lt_actvt.
    ENDLOOP.
*Activities - Attributes
    CLEAR ls_ti.
    ls_ti-name = txt_conversion_for_authorizati.
    ls_ti-value = ls_tobj-conversion.
    ls_ti-flag = abap_true.
    APPEND ls_ti TO lt_actvt_attr.
    CLEAR ls_ti.
    ls_ti-name = txt_activity.
    IF l_has_actvt = abap_true.
      ls_ti-value = 'ACTVT'.
    ENDIF.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_actvt_attr.
*Tabstrip
    LOOP AT lt_tabstrip ASSIGNING <ls_tabstrip>.
      <ls_tabstrip>-empty = abap_false.
      CASE <ls_tabstrip>-id.
        WHEN 'DOC'.
          IF lt_doc IS INITIAL.
            <ls_tabstrip>-empty = abap_true.
          ENDIF.
      ENDCASE.
    ENDLOOP.
*** HTML
    IF NOT lt_doc IS INITIAL.
      l_javascript = 'makeDivSize(''DOC'');'.
    ENDIF.
    PERFORM html_main_header
      USING
        tpt_tobj
        txt_object
        <ls_ztadir>-obj_name
        space
        txt_text
        <ls_ztadir>-descript
        l_javascript
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*Attributes
    PERFORM html_add_textinput_subbox
      USING
        lt_attr
        txt_authorization_fields
        lt_box
        'ATTRIBUTES'
        abap_true
      CHANGING
        lt_html.
*Activities
    PERFORM html_add_textinput_subbox
      USING
        lt_actvt_attr
        txt_values
        lt_actvt
        'ACTVT'
        abap_false
      CHANGING
        lt_html.
*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.
*
    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.
    <ls_ztadir>-downloaded = abap_true.
  ENDLOOP.

ENDFORM.                                                    "r3tr_tobj


*-----------------------------------------------------------------------
* t_r3tr_para                                   SET/GET Parameters
*-----------------------------------------------------------------------
FORM t_r3tr_para.

  DATA:
  ls_ti TYPE st_textinput,
  lt_ti TYPE it_textinput,
  l_filename TYPE string,
  lt_html TYPE it_string.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir.

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

    REFRESH:
    lt_html,
    lt_ti.

    CLEAR ls_ti.
    ls_ti-name = txt_parameter_id.
    ls_ti-value = <ls_ztadir>-obj_name.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti.

    CLEAR ls_ti.
    ls_ti-name = txt_text.
    ls_ti-value = <ls_ztadir>-descript.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_ti.

    l_filename = <ls_ztadir>-obj_name.
    PERFORM encode_uri_link CHANGING l_filename.
    PERFORM replace_all
      USING '%' 'x'
      CHANGING l_filename.

    PERFORM replace_all
      USING '<' '-'
      CHANGING l_filename.
    PERFORM replace_all
      USING '>' '-'
      CHANGING l_filename.
    PERFORM encode_uri
      CHANGING l_filename.

*** HTML
    PERFORM html_main_popupheader
      USING
        txt_component_information
      CHANGING
        lt_html.
*   Content
    PERFORM html_add_textinputnodiv
      USING
        lt_ti
      CHANGING
        lt_html.
*   Footer
    PERFORM html_main_popupfooter
      CHANGING lt_html.
*   Download
    PERFORM download
      USING
        lt_html
        <ls_ztadir>-pgmid
        <ls_ztadir>-object
        l_filename
        gc_extension_htm
        abap_true.

  ENDLOOP.

ENDFORM.                                                    "r3tr_para


*-----------------------------------------------------------------------
* t_r3tr_tran                                   Transactions
*-----------------------------------------------------------------------
FORM t_r3tr_tran.

  DATA:
  ls_tran TYPE st_transaction,
  ls_tstc TYPE tstc,
  ls_tstc_tmp TYPE tstc,
  lt_tstca TYPE STANDARD TABLE OF tstca,
  ls_tstcc TYPE tstcc,
  l_param TYPE tcdparam,
  l_tcode TYPE tcode,
  l_gui_title TYPE string,
  ls_ti TYPE st_textinput,
  lt_defval TYPE it_textinput,
  lt_gui_support TYPE it_textinput,
  lt_para TYPE it_transaction_para,
  ls_para TYPE st_transaction_para,
  lt_html TYPE it_string,
  l_off TYPE i,
  l_length TYPE i,
  l_str TYPE string,
  lt_str TYPE it_string,
  lt_tabstrip TYPE it_tabstrip.

  CONSTANTS:
  lc_hex_tra TYPE x VALUE '00',               " Transaktion         T
  lc_hex_men TYPE x VALUE '01',               " Bereichsmenue       M
  lc_hex_par TYPE x VALUE '02',               " Parametertrans.     P
  lc_hex_rep TYPE x VALUE '80',               " Report              R
  lc_hex_rpv TYPE x VALUE '10',               " Report  mit Variante
  lc_hex_obj TYPE x VALUE '08',               " Objekttransaktionen
  lc_hex_chk TYPE x VALUE '04',               " mit Pruefobjekt
  lc_oo_program(9)            VALUE '\PROGRAM=',
  lc_oo_class(7)              VALUE '\CLASS=',
  lc_oo_method(8)             VALUE '\METHOD=',
  lc_oo_tcode LIKE tstc-tcode VALUE 'OS_APPLICATION'.

  FIELD-SYMBOLS:
  <ls_ztadir> TYPE st_ztadir,
  <ls_tstca> TYPE tstca,
  <l_pervas> TYPE ANY.

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

    CLEAR:
    ls_para,
    ls_tran,
    ls_ti,
    ls_tstc,
    ls_tstc_tmp,
    ls_tstcc,
    l_param,
    l_tcode,
    l_gui_title,
    l_off,
    l_length,
    l_str.

    REFRESH:
    lt_tstca,
    lt_defval,
    lt_gui_support,
    lt_para,
    lt_html,
    lt_str,
    lt_tabstrip.


    l_tcode = <ls_ztadir>-obj_name.

    SELECT SINGLE * FROM tstc INTO ls_tstc
        WHERE tcode = l_tcode.
    ls_tran-pgmna = ls_tstc-pgmna.
    ls_tran-dypno = ls_tstc-dypno.
    IF ls_tstc-arbgb <> '&&'.
      ls_tran-trans_var = abap_true.
    ENDIF.

    SELECT * FROM tstca INTO TABLE lt_tstca
        WHERE tcode = l_tcode.
    LOOP AT lt_tstca ASSIGNING <ls_tstca>.
      ls_tran-objct = <ls_tstca>-objct.
      EXIT.
    ENDLOOP.

    SELECT SINGLE * FROM tstcc INTO ls_tstcc
        WHERE tcode = l_tcode.
    IF ls_tstcc-s_webgui = '2'.
      ls_tran-clf_ewt = abap_true.
      ls_tran-clf_profi = abap_false.
    ELSE.
      ls_tran-clf_ewt = abap_false.
      ls_tran-clf_profi = abap_true.
    ENDIF.
    ASSIGN COMPONENT 'S_PERVAS' OF STRUCTURE ls_tstcc TO <l_pervas>.
    IF <l_pervas> IS ASSIGNED.
      ls_tran-clf_pervas = <l_pervas>.
      UNASSIGN <l_pervas>.
    ENDIF.
    ls_tran-clf_service = ls_tstcc-s_service.
*Parameter
    SELECT SINGLE param FROM tstcp INTO l_param
        WHERE tcode = l_tcode.

    CASE l_param(1).
      WHEN '\'.
        IF l_param CS lc_oo_program.
          l_off = sy-fdpos + 9.
          l_length = strlen( l_param ) - l_off.
          l_str = l_param+l_off(l_length).
          IF l_str CA '\'.
            ls_tran-pgmna = l_str+0(sy-fdpos).
          ELSE.
            ls_tran-pgmna = l_str.
          ENDIF.
        ENDIF.
        IF l_param CS lc_oo_class.
          l_off = sy-fdpos + 7.
          l_length = strlen( l_param ) - l_off.
          l_str = l_param+l_off(l_length).
          IF l_str CA '\'.
            ls_tran-classname = l_str+0(sy-fdpos).
          ELSE.
            ls_tran-classname = l_str.
          ENDIF.
        ENDIF.
        IF l_param CS lc_oo_method.
          l_off = sy-fdpos + 8.
          l_length = strlen( l_param ) - l_off.
          l_str = l_param+l_off(l_length).
          IF l_str CA '\'.
            ls_tran-method = l_str+0(sy-fdpos).
          ELSE.
            ls_tran-method = l_str.
          ENDIF.
        ENDIF.
        IF NOT ls_tstc-pgmna IS INITIAL.
          ls_tran-local = abap_true.
        ENDIF.
      WHEN '@'.
        l_off = 1.
        IF l_param(2) = '@@'.
          l_off = 2.
          ls_tran-ind_vari = abap_true.
        ENDIF.
        IF l_param CA space. ENDIF.
        l_length = sy-fdpos - l_off.
        ls_tran-def_call_tcode = l_param+l_off(l_length).

        l_off = l_off + l_length + 1.
        l_length = strlen( l_param ).
        SUBTRACT l_off FROM l_length.
        ls_tran-variant = l_param+l_off(l_length).
      WHEN '/'.
        IF l_param+1(1) = '*'.
          ls_tran-def_skip_1 = abap_true.
        ENDIF.

        IF l_param CA space. ENDIF.
        l_length = sy-fdpos.
        IF l_length > 2.
          SUBTRACT 2 FROM l_length.
          ls_tran-def_call_tcode = l_param+2(l_length).
          SELECT SINGLE * FROM tstc INTO ls_tstc_tmp
              WHERE tcode = ls_tran-def_call_tcode.
          IF sy-subrc = 0.
            "...
          ENDIF.

          IF l_param CA '='.
            l_off = 3 + l_length.
            l_length = strlen( l_param ).
            SUBTRACT l_off FROM l_length.
            l_str = l_param+l_off(l_length).

            SPLIT l_str AT ';' INTO TABLE lt_str.
            LOOP AT lt_str INTO l_str.
              IF l_str CA '='.
                CLEAR ls_para.
                SPLIT l_str AT '=' INTO
                    ls_para-para_field ls_para-para_value.
                APPEND ls_para TO lt_para.
              ENDIF.
            ENDLOOP.
          ENDIF.
        ENDIF.
      WHEN OTHERS.
        IF l_param CA '='.
          SPLIT l_param AT ';' INTO TABLE lt_str.
          LOOP AT lt_str INTO l_str.
            IF l_str CA '='.
              CLEAR ls_para.
              SPLIT l_str AT '=' INTO
                  ls_para-para_field ls_para-para_value.
              APPEND ls_para TO lt_para.
            ENDIF.
          ENDLOOP.
        ENDIF.
    ENDCASE.
***
    SELECT SINGLE ttext FROM tstct INTO ls_tran-ttext
        WHERE sprsl = sy-langu
        AND tcode = l_tcode.
***
    IF ls_tstc-cinfo O lc_hex_rep.       "report transaction
      ls_tran-ttype = gc_tcode_report.
      l_gui_title = tpt_tran_repo.
      IF ls_tran-dypno IS INITIAL.
        ls_tran-dypno = '1000'.
      ENDIF.
      IF ls_tstc-cinfo O lc_hex_rpv AND NOT l_param IS INITIAL.
        ls_tran-repo_vari = l_param.
      ENDIF.
    ELSEIF ls_tstc-cinfo O lc_hex_obj.   "object transaction
      ls_tran-ttype = gc_tcode_object.
      l_gui_title = tpt_tran_obj.
      IF ls_tran-def_call_tcode = lc_oo_tcode.
        ls_tran-trframe = abap_true.
      ENDIF.
    ELSEIF ls_tstc-cinfo O lc_hex_par.   "parameter transaction
      ls_tran-ttype = gc_tcode_parameter.
      l_gui_title = tpt_tran_param.
      IF NOT l_param IS INITIAL
      AND l_param(1) = '@'.                 "variant transaction
        ls_tran-ttype = gc_tcode_variant.
        l_gui_title = tpt_tran_vari.
      ELSEIF ls_tran-def_call_tcode = lc_oo_tcode.
        "object transaction
        ls_tran-ttype = gc_tcode_object.
        l_gui_title = tpt_tran_obj.
        ls_tran-trframe = abap_true.
      ENDIF.
    ELSEIF ls_tstc-cinfo O lc_hex_men.   "menue
    ELSE.                                   "dialog transaction
      ls_tran-ttype = gc_tcode_dialog.
      l_gui_title = tpt_tran_dialog.
    ENDIF.

    IF NOT ls_tran-def_call_tcode IS INITIAL
    AND ( ls_tstcc IS INITIAL OR ls_tstcc = l_tcode )
    AND ls_tran-ttype <> gc_tcode_object.
      ls_tran-clf_inhe = abap_true.
      SELECT SINGLE * FROM tstcc INTO ls_tstcc
          WHERE tcode = ls_tran-def_call_tcode.
      IF ls_tstcc-s_webgui = '2'.
        ls_tran-clf_ewt = abap_true.
        ls_tran-clf_profi = abap_false.
      ELSE.
        ls_tran-clf_ewt = abap_false.
        ls_tran-clf_profi = abap_true.
      ENDIF.
      ASSIGN COMPONENT 'S_PERVAS' OF STRUCTURE ls_tstcc TO <l_pervas>.
      IF <l_pervas> IS ASSIGNED.
        ls_tran-clf_pervas = <l_pervas>.
        UNASSIGN <l_pervas>.
      ENDIF.
      ls_tran-clf_service = ls_tstcc-s_service.
    ENDIF.

*Default values for
    CLEAR ls_ti.
    ls_ti-name = txt_transaction.
    ls_ti-value = ls_tran-def_call_tcode.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_defval.
    CLEAR ls_ti.
    ls_ti-name = txt_skip_initial_screen.
    ls_ti-value = ls_tran-def_skip_1.
    ls_ti-flag = abap_true.
    APPEND ls_ti TO lt_defval.
    CLEAR ls_ti.
    ls_ti-name = txt_screen.
    ls_ti-value = ls_tran-dypno.
    ls_ti-input = abap_true.
    ls_ti-has_value_ext = abap_true.
    ls_ti-value_ext_space = abap_true.
    APPEND ls_ti TO lt_defval.
    CLEAR ls_ti.
    ls_ti-name = txt_from_module_pool.
    ls_ti-value = ls_tran-pgmna.
    ls_ti-input = abap_true.
    APPEND ls_ti TO lt_defval.
*GUI support
    CLEAR ls_ti.
    ls_ti-name = txt_sapgui_for_html.
    ls_ti-flag = abap_true.
    IF NOT ls_tstcc-s_webgui IS INITIAL.
      ls_ti-value = abap_true.
    ENDIF.
    APPEND ls_ti TO lt_gui_support.
    CLEAR ls_ti.
    ls_ti-name = txt_sapgui_for_java.
    ls_ti-flag = abap_true.
    ls_ti-value = ls_tstcc-s_platin.
    APPEND ls_ti TO lt_gui_support.
    CLEAR ls_ti.
    ls_ti-name = txt_sapgui_for_windows.
    ls_ti-flag = abap_true.
    ls_ti-value = ls_tstcc-s_win32.
    APPEND ls_ti TO lt_gui_support.

*** HTML
    PERFORM html_main_header
      USING
        l_gui_title
        txt_transaction_code
        <ls_ztadir>-obj_name
        space
        txt_package
        <ls_ztadir>-devclass
        'makeDivSize(''TRANSACTION'');'
        lt_tabstrip
        gt_link
      CHANGING
        lt_html.
*Transaction
    PERFORM html_add_transaction
      USING
        ls_tran
        lt_tstca
        lt_defval
        lt_gui_support
        lt_para
        'TRANSACTION'
        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.
    <ls_ztadir>-downloaded = abap_true.
  ENDLOOP.
ENDFORM.                                                    "r3tr_tran


*-----------------------------------------------------------------------
* optionals
*-----------------------------------------------------------------------
FORM optionals.
  PERFORM ddic.
  PERFORM fugr.
  PERFORM o2.
  PERFORM pack.
  PERFORM prog.
  PERFORM seo.
  PERFORM system.
  PERFORM t.
ENDFORM.                    "optionals
