<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic copying abap programs in Application Development and Automation Discussions</title>
    <link>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542534#M247053</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Pals,&lt;/P&gt;&lt;P&gt;I need some tips from you pals.&lt;/P&gt;&lt;P&gt;My question is we have a development sytem there one transactions is running, I just wanted to copy the program, screens etc for that transaction to disk and move to some other company as it is for support. I had tried but i could not copy the screen painter forms etc.. How can i do it as it is very important.&lt;/P&gt;&lt;P&gt;Your help will be appreciated.&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Omer.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 24 Aug 2006 16:20:18 GMT</pubDate>
    <dc:creator>Former Member</dc:creator>
    <dc:date>2006-08-24T16:20:18Z</dc:date>
    <item>
      <title>copying abap programs</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542534#M247053</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear Pals,&lt;/P&gt;&lt;P&gt;I need some tips from you pals.&lt;/P&gt;&lt;P&gt;My question is we have a development sytem there one transactions is running, I just wanted to copy the program, screens etc for that transaction to disk and move to some other company as it is for support. I had tried but i could not copy the screen painter forms etc.. How can i do it as it is very important.&lt;/P&gt;&lt;P&gt;Your help will be appreciated.&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;Omer.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Aug 2006 16:20:18 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542534#M247053</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2006-08-24T16:20:18Z</dc:date>
    </item>
    <item>
      <title>Re: copying abap programs</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542535#M247054</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;There are a couple utility programs floating around the internet,  I have a very good one which downloads the code and the dynpros, and allows you to upload again in another system.  IF interested, email me at the address on my business card.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Rich HEilman&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Aug 2006 16:22:12 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542535#M247054</guid>
      <dc:creator>RichHeilman</dc:creator>
      <dc:date>2006-08-24T16:22:12Z</dc:date>
    </item>
    <item>
      <title>Re: copying abap programs</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542536#M247055</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;When you go to the layout using SE51 ...there is a option available to download the same but make sure you do not change the file ...you can upload it in SAP system and view the form&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;REgards&lt;/P&gt;&lt;P&gt;Anurag&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Aug 2006 16:24:25 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542536#M247055</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2006-08-24T16:24:25Z</dc:date>
    </item>
    <item>
      <title>Re: copying abap programs</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542537#M247056</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Omer,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can download than upload screens from SE51.&lt;/P&gt;&lt;P&gt;get into the screen.&lt;/P&gt;&lt;P&gt;open attributes tab.&lt;/P&gt;&lt;P&gt;u have upload/download option in utilities.&lt;/P&gt;&lt;P&gt;download the screen into ur local file.&lt;/P&gt;&lt;P&gt;than u can upload it from other server.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;-Anu&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Aug 2006 16:27:06 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542537#M247056</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2006-08-24T16:27:06Z</dc:date>
    </item>
    <item>
      <title>Re: copying abap programs</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542538#M247057</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi Mohammed,&lt;/P&gt;&lt;P&gt; for uploading or downloading the screns do this way out ...&lt;/P&gt;&lt;P&gt;first for downlaoding a screen ..&lt;/P&gt;&lt;P&gt;goto -&amp;gt; utilities-&amp;gt;moreutilities-&amp;gt;download ..&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;now go to the program create a screen..then&lt;/P&gt;&lt;P&gt;goto -&amp;gt; utilities-&amp;gt;moreutilities-&amp;gt;upload ..&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;this way u can copy the screen attributes..&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Santosh&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Aug 2006 16:30:27 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542538#M247057</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2006-08-24T16:30:27Z</dc:date>
    </item>
    <item>
      <title>Re: copying abap programs</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542539#M247058</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You can download individual screen. Goto se51-&amp;gt;Utilities-&amp;gt;More Utilities-&amp;gt;upload/download-&amp;gt;download.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This way you can download all the screens one by one.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Richa&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Aug 2006 16:31:33 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542539#M247058</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2006-08-24T16:31:33Z</dc:date>
    </item>
    <item>
      <title>Re: copying abap programs</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542540#M247059</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hello Mohamed&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If it is a customer program (Y/Z or with namespace) and you do not have to rename the program why don't your create a transport request with all required objects? If your customer allows to import such requests this is an very easy way to go.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards&lt;/P&gt;&lt;P&gt;   Uwe&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Aug 2006 19:59:01 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542540#M247059</guid>
      <dc:creator>uwe_schieferstein</dc:creator>
      <dc:date>2006-08-24T19:59:01Z</dc:date>
    </item>
    <item>
      <title>Re: copying abap programs</title>
      <link>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542541#M247060</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Mohamed,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here is a program given by someone last week in the forum.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PROGRAM zdown.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*=======================================================================&lt;/P&gt;&lt;P&gt;*=================================&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Direct Download Enterprise version 1.2.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; THIS SOFTWARE IS FOR PERSONAL USE ONLY.&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; THIS PROGRAM IS FREEWARE AND IS PROVIDED ON AN AS-IS BASIS WITHOUT&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*WARRANTY OF ANY KIND.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; THE PROVIDER SPECIFICALLY DISCLAIMS ANY OTHER WARRANTY, EXPRESS OR&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*IMPLIED, INCLUDING ANY WARRANTY OF&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;**&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; IN NO EVENT SHALL PROVIDER BE LIABLE FOR ANY CONSEQUENTIAL,&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;**----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------" /&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; PROGRAM DESCRIPTION &amp;amp; USE&lt;/P&gt;&lt;/LI&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; Allows a user to download programs, Functions, DD definitions, etc&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*to the presentation server.  This&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; version searches recursively for nested includes and function&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*modules, and allows you to download&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; the resulting code as standard text or HTML web pages within a&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*suitable directory structure.&lt;/P&gt;&lt;P&gt;**&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; You can either search by object name, using wildcards if you wish,&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*or a combination of Author and&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; object name.  If you want all objects returned for a particular&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*author then select the author name&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; and choose the most suitable radiobutton.  All objects will be&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*returned if the fields to the right&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; hand side of the radiobutton are left completely blank.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;**&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; Compatible with R/3 Enterprise only, for older versions of SAP you&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*will need Direct Download version 5.xx.&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; This version removes the programming limitations imposed by&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*developing across SAP releases 3 to 4.6.&lt;/P&gt;&lt;P&gt;**&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; This program is intended to allow a person to keep a visual&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*representation of a program for backup&lt;/P&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt; purposes only as has not been designed to allow programs to be&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*uploaded to SAP systems.&lt;/P&gt;&lt;P&gt;**----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="----------------------------" /&gt;&lt;P&gt;**&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;AUTHOR          : E.G.Mellodew&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;PROGRAM CONTACT : direct@dalestech.com&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                  &lt;A href="https://community.sap.com/www.dalestech.com" target="test_blank"&gt;www.dalestech.com&lt;/A&gt;&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Types&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;text element structure&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: ttexttable LIKE textpool.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;GUI titles&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: tguititle LIKE d347t.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Message classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF tmessage,&lt;/P&gt;&lt;P&gt;         arbgb LIKE t100-arbgb,&lt;/P&gt;&lt;P&gt;         stext LIKE t100a-stext,&lt;/P&gt;&lt;P&gt;         msgnr LIKE t100-msgnr,&lt;/P&gt;&lt;P&gt;         text  LIKE t100-text,&lt;/P&gt;&lt;P&gt;       END OF tmessage.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Screen flow.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF tscreenflow,&lt;/P&gt;&lt;P&gt;         screen LIKE d020s-dnum,&lt;/P&gt;&lt;P&gt;         code LIKE d022s-line,&lt;/P&gt;&lt;P&gt;       END OF tscreenflow.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Holds a table\structure definition&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF tdicttablestructure,&lt;/P&gt;&lt;P&gt;         fieldname LIKE dd03l-fieldname,&lt;/P&gt;&lt;P&gt;         position  LIKE dd03l-position,&lt;/P&gt;&lt;P&gt;         keyflag   LIKE dd03l-keyflag,&lt;/P&gt;&lt;P&gt;         rollname  LIKE dd03l-rollname,&lt;/P&gt;&lt;P&gt;         domname   LIKE dd03l-domname,&lt;/P&gt;&lt;P&gt;         datatype  LIKE dd03l-datatype,&lt;/P&gt;&lt;P&gt;         leng      LIKE dd03l-leng,&lt;/P&gt;&lt;P&gt;         ddtext    LIKE dd04t-ddtext,&lt;/P&gt;&lt;P&gt;       END OF tdicttablestructure.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Holds a tables attributes + its definition&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF tdicttable,&lt;/P&gt;&lt;P&gt;         tablename    LIKE dd03l-tabname,&lt;/P&gt;&lt;P&gt;         tabletitle   LIKE dd02t-ddtext,&lt;/P&gt;&lt;P&gt;         istructure TYPE tdicttablestructure OCCURS 0,&lt;/P&gt;&lt;P&gt;       END OF tdicttable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Include program names&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF tinclude,&lt;/P&gt;&lt;P&gt;         includename LIKE trdir-name,&lt;/P&gt;&lt;P&gt;         includetitle LIKE tftit-stext,&lt;/P&gt;&lt;P&gt;       END OF tinclude.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Method&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF tmethod,&lt;/P&gt;&lt;P&gt;         cmpname LIKE vseomethod-cmpname,&lt;/P&gt;&lt;P&gt;         descript LIKE vseomethod-descript,&lt;/P&gt;&lt;P&gt;         exposure LIKE vseomethod-exposure,&lt;/P&gt;&lt;P&gt;         methodkey TYPE string,&lt;/P&gt;&lt;P&gt;       END OF tmethod.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF tclass,&lt;/P&gt;&lt;P&gt;         scanned(1),&lt;/P&gt;&lt;P&gt;         clsname LIKE vseoclass-clsname,&lt;/P&gt;&lt;P&gt;         descript LIKE vseoclass-descript,&lt;/P&gt;&lt;P&gt;         msg_id LIKE vseoclass-msg_id,&lt;/P&gt;&lt;P&gt;         exposure LIKE vseoclass-exposure,&lt;/P&gt;&lt;P&gt;         state LIKE vseoclass-state,&lt;/P&gt;&lt;P&gt;         clsfinal LIKE vseoclass-clsfinal,&lt;/P&gt;&lt;P&gt;         r3release LIKE vseoclass-r3release,&lt;/P&gt;&lt;P&gt;         imethods TYPE tmethod OCCURS 0,&lt;/P&gt;&lt;P&gt;         idictstruct TYPE tdicttable OCCURS 0,&lt;/P&gt;&lt;P&gt;         itextelements TYPE ttexttable OCCURS 0,&lt;/P&gt;&lt;P&gt;         imessages TYPE tmessage OCCURS 0,&lt;/P&gt;&lt;P&gt;         textelementkey TYPE string,&lt;/P&gt;&lt;P&gt;         publicclasskey TYPE string,&lt;/P&gt;&lt;P&gt;         privateclasskey TYPE string,&lt;/P&gt;&lt;P&gt;         protectedclasskey TYPE string,&lt;/P&gt;&lt;P&gt;         typesclasskey TYPE string,&lt;/P&gt;&lt;P&gt;         exceptionclass TYPE i,&lt;/P&gt;&lt;P&gt;       END OF tclass.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;function modules&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;TYPES: BEGIN OF tfunction,&lt;/P&gt;&lt;P&gt;         functionname LIKE tfdir-funcname,&lt;/P&gt;&lt;P&gt;         functiongroup LIKE enlfdir-area,&lt;/P&gt;&lt;P&gt;         includenumber LIKE tfdir-include,&lt;/P&gt;&lt;P&gt;         functionmaininclude LIKE tfdir-funcname,&lt;/P&gt;&lt;P&gt;         functiontitle LIKE tftit-stext,&lt;/P&gt;&lt;P&gt;         topincludename LIKE tfdir-funcname,&lt;/P&gt;&lt;P&gt;         progname LIKE tfdir-pname,&lt;/P&gt;&lt;P&gt;         programlinkname LIKE tfdir-pname,&lt;/P&gt;&lt;P&gt;         messageclass LIKE t100-arbgb,&lt;/P&gt;&lt;P&gt;         itextelements TYPE ttexttable OCCURS 0,&lt;/P&gt;&lt;P&gt;         iselectiontexts TYPE ttexttable OCCURS 0,&lt;/P&gt;&lt;P&gt;         imessages TYPE tmessage OCCURS 0,&lt;/P&gt;&lt;P&gt;         iincludes TYPE tinclude OCCURS 0,&lt;/P&gt;&lt;P&gt;         idictstruct TYPE tdicttable OCCURS 0,&lt;/P&gt;&lt;P&gt;         iguititle TYPE tguititle OCCURS 0,&lt;/P&gt;&lt;P&gt;         iscreenflow TYPE tscreenflow OCCURS 0,&lt;/P&gt;&lt;P&gt;       END OF tfunction.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;TYPES: BEGIN OF tprogram,&lt;/P&gt;&lt;P&gt;         progname LIKE trdir-name,&lt;/P&gt;&lt;P&gt;         programtitle LIKE tftit-stext,&lt;/P&gt;&lt;P&gt;         subc LIKE trdir-subc,&lt;/P&gt;&lt;P&gt;         messageclass LIKE t100-arbgb,&lt;/P&gt;&lt;P&gt;         imessages TYPE tmessage OCCURS 0,&lt;/P&gt;&lt;P&gt;         itextelements TYPE ttexttable OCCURS 0,&lt;/P&gt;&lt;P&gt;         iselectiontexts TYPE ttexttable OCCURS 0,&lt;/P&gt;&lt;P&gt;         iguititle TYPE tguititle OCCURS 0,&lt;/P&gt;&lt;P&gt;         iscreenflow TYPE tscreenflow OCCURS 0,&lt;/P&gt;&lt;P&gt;         iincludes TYPE tinclude OCCURS 0,&lt;/P&gt;&lt;P&gt;         idictstruct TYPE tdicttable OCCURS 0,&lt;/P&gt;&lt;P&gt;       END OF tprogram.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Internal tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Dictionary object&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: idictionary TYPE STANDARD TABLE OF tdicttable WITH HEADER LINE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Function modules.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: ifunctions TYPE STANDARD TABLE OF tfunction WITH HEADER LINE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Tree display structure.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: itreedisplay TYPE STANDARD TABLE OF snodetext WITH HEADER LINE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Message class data&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: imessages TYPE STANDARD TABLE OF tmessage WITH HEADER LINE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Holds a single message class an all of its messages&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: isinglemessageclass TYPE STANDARD TABLE OF tmessage WITH HEADER&lt;/P&gt;&lt;P&gt;LINE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Holds program related data&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: iprograms TYPE STANDARD TABLE OF tprogram WITH HEADER LINE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;DATA: iclasses TYPE STANDARD TABLE OF tclass WITH HEADER LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Table prototypes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;DATA: dumidictstructure TYPE STANDARD TABLE OF tdicttablestructure.&lt;/P&gt;&lt;P&gt;DATA: dumitexttab TYPE STANDARD TABLE OF ttexttable.&lt;/P&gt;&lt;P&gt;DATA: dumiincludes TYPE STANDARD TABLE OF tinclude.&lt;/P&gt;&lt;P&gt;DATA: dumihtml TYPE STANDARD TABLE OF string.&lt;/P&gt;&lt;P&gt;DATA: dumiheader TYPE STANDARD TABLE OF string .&lt;/P&gt;&lt;P&gt;DATA: dumiscreen TYPE STANDARD TABLE OF tscreenflow .&lt;/P&gt;&lt;P&gt;DATA: dumiguititle TYPE STANDARD TABLE OF tguititle.&lt;/P&gt;&lt;P&gt;DATA: dumimethods TYPE STANDARD TABLE OF tmethod.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Global objects&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;DATA: objfile TYPE REF TO cl_gui_frontend_services.&lt;/P&gt;&lt;P&gt;DATA: objruntimeerror TYPE REF TO cx_root.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Constants&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;CONSTANTS: versionno TYPE string VALUE '1.2'.&lt;/P&gt;&lt;P&gt;CONSTANTS: tables TYPE string VALUE 'TABLES'.&lt;/P&gt;&lt;P&gt;CONSTANTS: like TYPE string VALUE 'LIKE'.&lt;/P&gt;&lt;P&gt;CONSTANTS: type TYPE string VALUE 'TYPE'.&lt;/P&gt;&lt;P&gt;CONSTANTS: typerefto TYPE string VALUE 'TYPE REF TO'.&lt;/P&gt;&lt;P&gt;CONSTANTS: structure TYPE string VALUE 'STRUCTURE'.&lt;/P&gt;&lt;P&gt;CONSTANTS: lowstructure TYPE string VALUE 'structure'.&lt;/P&gt;&lt;P&gt;CONSTANTS: occurs TYPE string VALUE 'OCCURS'.&lt;/P&gt;&lt;P&gt;CONSTANTS: function TYPE string VALUE 'FUNCTION'.&lt;/P&gt;&lt;P&gt;CONSTANTS: callfunction TYPE string VALUE ' CALL FUNCTION'.&lt;/P&gt;&lt;P&gt;CONSTANTS: message TYPE string  VALUE 'MESSAGE'.&lt;/P&gt;&lt;P&gt;CONSTANTS: include TYPE string VALUE 'INCLUDE'.&lt;/P&gt;&lt;P&gt;CONSTANTS: lowinclude TYPE string VALUE 'include'.&lt;/P&gt;&lt;P&gt;CONSTANTS: destination TYPE string VALUE 'DESTINATION'.&lt;/P&gt;&lt;P&gt;CONSTANTS: is_table TYPE string VALUE 'T'.&lt;/P&gt;&lt;P&gt;CONSTANTS: is_program TYPE string VALUE 'P'.&lt;/P&gt;&lt;P&gt;CONSTANTS: is_screen TYPE string VALUE 'S'.&lt;/P&gt;&lt;P&gt;CONSTANTS: is_guititle TYPE string VALUE 'G'.&lt;/P&gt;&lt;P&gt;CONSTANTS: is_documentation TYPE string VALUE 'D'.&lt;/P&gt;&lt;P&gt;CONSTANTS: is_messageclass TYPE string VALUE 'MC'.&lt;/P&gt;&lt;P&gt;CONSTANTS: is_function TYPE string VALUE 'F'.&lt;/P&gt;&lt;P&gt;CONSTANTS: is_class TYPE string VALUE 'C'.&lt;/P&gt;&lt;P&gt;CONSTANTS: is_method TYPE string VALUE 'M'.&lt;/P&gt;&lt;P&gt;CONSTANTS: asterix TYPE string VALUE '*'.&lt;/P&gt;&lt;P&gt;CONSTANTS: comma TYPE string VALUE ','.&lt;/P&gt;&lt;P&gt;CONSTANTS: period TYPE string VALUE '.'.&lt;/P&gt;&lt;P&gt;CONSTANTS: dash TYPE string VALUE '-'.&lt;/P&gt;&lt;P&gt;CONSTANTS: true TYPE i VALUE 1.&lt;/P&gt;&lt;P&gt;CONSTANTS: false TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;CONSTANTS: lt TYPE string VALUE '&amp;lt;'.&lt;/P&gt;&lt;P&gt;CONSTANTS: gt TYPE string VALUE '&amp;gt;'.&lt;/P&gt;&lt;P&gt;CONSTANTS: unix TYPE string VALUE 'UNIX'.&lt;/P&gt;&lt;P&gt;CONSTANTS: non_unix TYPE string VALUE 'not UNIX'.&lt;/P&gt;&lt;P&gt;CONSTANTS: background_colour TYPE string VALUE '#FFFFE0'.&lt;/P&gt;&lt;P&gt;CONSTANTS: colour_white TYPE string VALUE '#FFFFFF'.&lt;/P&gt;&lt;P&gt;CONSTANTS: colour_black TYPE string VALUE '#000000'.&lt;/P&gt;&lt;P&gt;CONSTANTS: colour_yellow TYPE string VALUE '#FFFF00'.&lt;/P&gt;&lt;P&gt;CONSTANTS: comment_colour TYPE string VALUE '#0000FF'.&lt;/P&gt;&lt;P&gt;CONSTANTS: htmlextension TYPE string VALUE 'html'.&lt;/P&gt;&lt;P&gt;CONSTANTS: textextension TYPE string VALUE 'txt'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Global variables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;DATA: statusbarmessage(100).&lt;/P&gt;&lt;P&gt;DATA: forcedexit TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;DATA: starttime LIKE sy-uzeit.&lt;/P&gt;&lt;P&gt;DATA: runtime LIKE sy-uzeit.&lt;/P&gt;&lt;P&gt;DATA: downloadfileextension TYPE string.&lt;/P&gt;&lt;P&gt;DATA: downloadfolder TYPE string.&lt;/P&gt;&lt;P&gt;DATA: slashseparator TYPE string.&lt;/P&gt;&lt;P&gt;DATA: frontendopsystem TYPE string.&lt;/P&gt;&lt;P&gt;DATA: customernamespace TYPE string.&lt;/P&gt;&lt;P&gt;RANGES: soprogramname FOR trdir-name.&lt;/P&gt;&lt;P&gt;RANGES: soauthor FOR usr02-bname.&lt;/P&gt;&lt;P&gt;RANGES: sotable FOR dd02l-tabname.&lt;/P&gt;&lt;P&gt;RANGES: sofunctionname  FOR tfdir-funcname.&lt;/P&gt;&lt;P&gt;RANGES: soclassname FOR vseoclass-clsname.&lt;/P&gt;&lt;P&gt;RANGES: sofunctiongroup FOR enlfdir-area.&lt;/P&gt;&lt;P&gt;FIELD-SYMBOLS: &amp;lt;wadictstruct&amp;gt; TYPE tdicttable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Selection screen declaration&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Author&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE tblock1.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 5(23) tauth.&lt;/P&gt;&lt;P&gt;PARAMETERS: pauth LIKE usr02-bname MEMORY ID mauth.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 5(36) tpmod.&lt;/P&gt;&lt;P&gt;PARAMETERS: pmod AS CHECKBOX.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*--- Local objects&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 5(36) t$tmp.&lt;/P&gt;&lt;P&gt;PARAMETERS: p$tmp AS CHECKBOX DEFAULT ''.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN: END OF BLOCK b1.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE tblock2.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;PARAMETERS: rtable RADIOBUTTON GROUP r1.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 5(20) trtable.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 10(18) tptable.&lt;/P&gt;&lt;P&gt;PARAMETERS: ptable LIKE dd02l-tabname MEMORY ID mtable.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 10(79) ttnote.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 10(79) ttnote1.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Message classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;PARAMETERS: rmess RADIOBUTTON GROUP r1.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 5(18) tpmes.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 10(18) tmname.&lt;/P&gt;&lt;P&gt;PARAMETERS: pmname LIKE t100-arbgb MEMORY ID mmname.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Function modules&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;PARAMETERS: rfunc RADIOBUTTON GROUP r1.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 5(30) trfunc.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 10(18) tpfname.&lt;/P&gt;&lt;P&gt;PARAMETERS: pfname LIKE tfdir-funcname MEMORY ID mfname.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 10(18) tfgroup.&lt;/P&gt;&lt;P&gt;PARAMETERS: pfgroup LIKE enlfdir-area MEMORY ID mfgroup.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;PARAMETERS: rclass RADIOBUTTON GROUP r1.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 5(30) trclass.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 10(18) tpcname.&lt;/P&gt;&lt;P&gt;PARAMETERS: pclname LIKE seoclass-clsname MEMORY ID mcname.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Programs / includes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;PARAMETERS: rprog RADIOBUTTON GROUP r1 DEFAULT 'X'.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 5(18) tprog.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 10(18) trpname.&lt;/P&gt;&lt;P&gt;PARAMETERS: pprog LIKE trdir-name MEMORY ID mprog.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN SKIP.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Language&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(18) tmlang.&lt;/P&gt;&lt;P&gt;PARAMETERS: pmlang LIKE t100-sprsl DEFAULT 'EN'.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Package&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(18) tpack.&lt;/P&gt;&lt;P&gt;PARAMETERS: ppack LIKE tadiv-devclass MEMORY ID mpack.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Customer objects&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(27) tcust.&lt;/P&gt;&lt;P&gt;PARAMETERS: pcust AS CHECKBOX DEFAULT 'X'.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 32(25) tnrange.&lt;/P&gt;&lt;P&gt;PARAMETERS: pcname TYPE namespace MEMORY ID mnamespace.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN: END OF BLOCK b2.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Additional things to download.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN: BEGIN OF BLOCK b3 WITH FRAME TITLE tblock3.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(33) tptext.&lt;/P&gt;&lt;P&gt;PARAMETERS: ptext AS CHECKBOX DEFAULT 'X' MEMORY ID mtext.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(33) tmess.&lt;/P&gt;&lt;P&gt;PARAMETERS: pmess AS CHECKBOX DEFAULT 'X' MEMORY ID mmess.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(33) tpinc.&lt;/P&gt;&lt;P&gt;PARAMETERS: pinc AS CHECKBOX DEFAULT 'X' MEMORY ID minc.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 40(20) trecc.&lt;/P&gt;&lt;P&gt;PARAMETERS: preci AS CHECKBOX DEFAULT 'X' MEMORY ID mreci.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(33) tpfunc.&lt;/P&gt;&lt;P&gt;PARAMETERS: pfunc AS CHECKBOX DEFAULT 'X' MEMORY ID mfunc.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 40(20) trecf.&lt;/P&gt;&lt;P&gt;PARAMETERS: precf AS CHECKBOX DEFAULT 'X' MEMORY ID mrecf.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(33) tdoc.&lt;/P&gt;&lt;P&gt;PARAMETERS: pdoc AS CHECKBOX DEFAULT 'X' MEMORY ID mdoc.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(33) tpscr.&lt;/P&gt;&lt;P&gt;PARAMETERS: pscr AS CHECKBOX DEFAULT 'X' MEMORY ID mscr.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(33) tpdict.&lt;/P&gt;&lt;P&gt;PARAMETERS: pdict AS CHECKBOX DEFAULT 'X' MEMORY ID mdict.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(33) tsortt.&lt;/P&gt;&lt;P&gt;PARAMETERS: psortt AS CHECKBOX DEFAULT ' ' MEMORY ID msortt.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN: END OF BLOCK b3.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;File details&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;SELECTION-SCREEN: BEGIN OF BLOCK b4 WITH FRAME TITLE tblock4.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(20) tphtml.&lt;/P&gt;&lt;P&gt;PARAMETERS: phtml RADIOBUTTON GROUP g1 DEFAULT 'X'.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 5(25) tcomm.&lt;/P&gt;&lt;P&gt;PARAMETERS: pcomm AS CHECKBOX DEFAULT 'X'.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 5(25) tback.&lt;/P&gt;&lt;P&gt;PARAMETERS: pback AS CHECKBOX DEFAULT 'X'.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(20) tptxt.&lt;/P&gt;&lt;P&gt;PARAMETERS: ptxt RADIOBUTTON GROUP g1.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN SKIP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;SELECTION-SCREEN BEGIN OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN COMMENT 1(20) tppath.&lt;/P&gt;&lt;P&gt;PARAMETERS: pfolder LIKE rlgrap-filename OBLIGATORY MEMORY ID&lt;/P&gt;&lt;P&gt;mfolder.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN END OF LINE.&lt;/P&gt;&lt;P&gt;SELECTION-SCREEN: END OF BLOCK b4.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Display a directory picker window&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;AT SELECTION-SCREEN ON VALUE-REQUEST FOR pfolder.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: objfile TYPE REF TO cl_gui_frontend_services.&lt;/P&gt;&lt;P&gt;  DATA: pickedfolder TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: initialfolder TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CREATE OBJECT objfile.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT pfolder IS INITIAL.&lt;/P&gt;&lt;P&gt;    initialfolder = pfolder.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    objfile-&amp;gt;get_temp_directory( CHANGING temp_dir = initialfolder&lt;/P&gt;&lt;P&gt;                                 EXCEPTIONS cntl_error = 1&lt;/P&gt;&lt;P&gt;                                           error_no_gui = 2&lt;/P&gt;&lt;P&gt;                                           not_supported_by_gui = 3 ).&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  objfile-&amp;gt;directory_browse( EXPORTING initial_folder = initialfolder&lt;/P&gt;&lt;P&gt;                             CHANGING selected_folder = pickedfolder&lt;/P&gt;&lt;P&gt;                             EXCEPTIONS cntl_error = 1&lt;/P&gt;&lt;P&gt;                                        error_no_gui = 2&lt;/P&gt;&lt;P&gt;                                        not_supported_by_gui = 3 ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;    pfolder = pickedfolder.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    WRITE: / 'An error has occured picking a folder'.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;initialisation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;INITIALIZATION.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Parameter screen texts.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  tblock1 = 'Author (Optional)'.&lt;/P&gt;&lt;P&gt;  t$tmp   = 'Programs only: include local objects'.&lt;/P&gt;&lt;P&gt;  tblock2 = 'Objects to download'.&lt;/P&gt;&lt;P&gt;  tblock3 = 'Additional downloads for progs, func modules and classes'.&lt;/P&gt;&lt;P&gt;  tblock4 = 'Download parameters'.&lt;/P&gt;&lt;P&gt;  tauth   = 'Author name'.&lt;/P&gt;&lt;P&gt;  tpmod   = 'Include programs modified by author'.&lt;/P&gt;&lt;P&gt;  tcust   = 'Only customer objects'.&lt;/P&gt;&lt;P&gt;  tnrange = 'Alt customer name range'.&lt;/P&gt;&lt;P&gt;  trtable = 'Tables / Structures'.&lt;/P&gt;&lt;P&gt;  tptable = 'Table name'.&lt;/P&gt;&lt;P&gt;  ttnote  = 'Please note: tables are stored under the username of the'.&lt;/P&gt;&lt;P&gt;  ttnote1 = 'last person who modified them.'.&lt;/P&gt;&lt;P&gt;  trfunc  = 'Function modules'.&lt;/P&gt;&lt;P&gt;  tpfname = 'Function name'.&lt;/P&gt;&lt;P&gt;  tfgroup = 'Function group'.&lt;/P&gt;&lt;P&gt;  trclass  = 'Classes'.&lt;/P&gt;&lt;P&gt;  tpcname = 'Class name'.&lt;/P&gt;&lt;P&gt;  tmess   = 'Message class'.&lt;/P&gt;&lt;P&gt;  tmname  = 'Class name'.&lt;/P&gt;&lt;P&gt;  tmlang  = 'Language'.&lt;/P&gt;&lt;P&gt;  tprog   = 'Programs'.&lt;/P&gt;&lt;P&gt;  trpname = 'Program name'.&lt;/P&gt;&lt;P&gt;  tpack   = 'Package'.&lt;/P&gt;&lt;P&gt;  tptxt   = 'Text document'.&lt;/P&gt;&lt;P&gt;  tphtml  = 'HTML document'.&lt;/P&gt;&lt;P&gt;  tcomm   = 'Highlight comments'.&lt;/P&gt;&lt;P&gt;  tback   = 'Include background colour'.&lt;/P&gt;&lt;P&gt;  tptext  = 'Text elements'.&lt;/P&gt;&lt;P&gt;  tpinc   = 'Include programs'.&lt;/P&gt;&lt;P&gt;  trecc   = 'Recursive search'.&lt;/P&gt;&lt;P&gt;  tppath  = 'File path'.&lt;/P&gt;&lt;P&gt;  tpmes   = 'Message classes'.&lt;/P&gt;&lt;P&gt;  tpfunc  = 'Function modules'.&lt;/P&gt;&lt;P&gt;  tdoc    = 'Function module documentation'.&lt;/P&gt;&lt;P&gt;  trecf   = 'Recursive search'.&lt;/P&gt;&lt;P&gt;  tpscr   = 'Screens'.&lt;/P&gt;&lt;P&gt;  tpdict  = 'Dictionary structures'.&lt;/P&gt;&lt;P&gt;  tsortt  = 'Sort table fields alphabetically'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Determine the frontend operating system type.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM determinefrontendopsystem USING slashseparator.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;start-of-selection.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;START-OF-SELECTION.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM checkcomboboxes.&lt;/P&gt;&lt;P&gt;  PERFORM fillselectionranges.&lt;/P&gt;&lt;P&gt;  downloadfolder = pfolder.&lt;/P&gt;&lt;P&gt;  starttime = sy-uzeit.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Fool the HTML routines to stop them hyperlinking anything with a space&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*in them&lt;/P&gt;&lt;P&gt;  IF pcname IS INITIAL.&lt;/P&gt;&lt;P&gt;    customernamespace  = '^'.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    customernamespace = pcname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Main program flow.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CASE 'X'.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Select tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN rtable.&lt;/P&gt;&lt;P&gt;      PERFORM retrievetables USING idictionary[]&lt;/P&gt;&lt;P&gt;                                   sotable[]&lt;/P&gt;&lt;P&gt;                                   soauthor[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Select message classes tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN rmess.&lt;/P&gt;&lt;P&gt;      PERFORM retrievemessageclass USING imessages[]&lt;/P&gt;&lt;P&gt;                               soauthor[]      "Author&lt;/P&gt;&lt;P&gt;                               pmname          "Message classname&lt;/P&gt;&lt;P&gt;                               pmlang          "Message classanguage&lt;/P&gt;&lt;P&gt;                              pmod.           "Modified by author&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Select function modules&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN rfunc.&lt;/P&gt;&lt;P&gt;      IF pfname+0(1) CA asterix.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Restrict the search to customer objects only.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        pcust = 'X'.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF pfgroup+0(1) CA asterix.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Restrict the search to customer objects only.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        pcust = 'X'.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;      PERFORM retrievefunctions USING sofunctionname[]   "Function name&lt;/P&gt;&lt;P&gt;                                      sofunctiongroup[]  "Function group&lt;/P&gt;&lt;P&gt;                                  ifunctions[]       "Foundfunctions&lt;/P&gt;&lt;P&gt;                                  pauth         "Author&lt;/P&gt;&lt;P&gt;                                  ptext         "Get textelements&lt;/P&gt;&lt;P&gt;                                  pscr          "Get screens&lt;/P&gt;&lt;P&gt;                                  pcust         "Customer data only&lt;/P&gt;&lt;P&gt;                          customernamespace. "Customer name range&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      LOOP AT ifunctions.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Find Dict structures, messages, functions, includes etc.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        PERFORM scanforadditionalfuncstuff USING ifunctions[]&lt;/P&gt;&lt;P&gt;                                                 preci&lt;/P&gt;&lt;P&gt;      "Search for includes recursively&lt;/P&gt;&lt;P&gt;                                                 precf&lt;/P&gt;&lt;P&gt;      "Search for functions recursively&lt;/P&gt;&lt;P&gt;                                                 pinc&lt;/P&gt;&lt;P&gt;      "Search for includes&lt;/P&gt;&lt;P&gt;                                                 pfunc&lt;/P&gt;&lt;P&gt;      "Search for functions&lt;/P&gt;&lt;P&gt;                                                 pdict&lt;/P&gt;&lt;P&gt;      "search for dictionary objects&lt;/P&gt;&lt;P&gt;                                                 pmess&lt;/P&gt;&lt;P&gt;      "Search for messages&lt;/P&gt;&lt;P&gt;                                                 pcust&lt;/P&gt;&lt;P&gt;      "Customer data only&lt;/P&gt;&lt;P&gt;                                                 customernamespace.&lt;/P&gt;&lt;P&gt;        "Customer name range&lt;/P&gt;&lt;P&gt;      ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Select Classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN rclass.&lt;/P&gt;&lt;P&gt;      IF pclname+0(1) CA asterix.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Restrict the search to customer objects only.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        pcust = 'X'.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      PERFORM retrieveclasses USING iclasses[]&lt;/P&gt;&lt;P&gt;                                    ifunctions[]&lt;/P&gt;&lt;P&gt;                                    soclassname[]       "Class name&lt;/P&gt;&lt;P&gt;                                    soauthor[]          "Author&lt;/P&gt;&lt;P&gt;                           customernamespace   "Customer namerange&lt;/P&gt;&lt;P&gt;                                    pmod       "Also modifiedby author&lt;/P&gt;&lt;P&gt;                                    pcust       "Customer objectonly&lt;/P&gt;&lt;P&gt;                                    pmess       "Find messages&lt;/P&gt;&lt;P&gt;                                    ptext               "Text Elements&lt;/P&gt;&lt;P&gt;                               pdict               "Dictionarystructures&lt;/P&gt;&lt;P&gt;                                    pfunc               "Get functions&lt;/P&gt;&lt;P&gt;                                    pinc                "Get includes&lt;/P&gt;&lt;P&gt;             precf               "Searchrecursively for functions&lt;/P&gt;&lt;P&gt;            preci               "Searchrecursively for includes&lt;/P&gt;&lt;P&gt;            'X'                 "Searchrecursively for classes&lt;/P&gt;&lt;P&gt;           pmlang.             "Language&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      LOOP AT ifunctions.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Find Dict structures, messages, functions, includes etc.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        PERFORM scanforadditionalfuncstuff USING ifunctions[]&lt;/P&gt;&lt;P&gt;                                                 preci&lt;/P&gt;&lt;P&gt;      "Search for includes recursively&lt;/P&gt;&lt;P&gt;                                                 precf&lt;/P&gt;&lt;P&gt;      "Search for functions recursively&lt;/P&gt;&lt;P&gt;                                                 pinc&lt;/P&gt;&lt;P&gt;      "Search for includes&lt;/P&gt;&lt;P&gt;                                                 pfunc&lt;/P&gt;&lt;P&gt;      "Search for functions&lt;/P&gt;&lt;P&gt;                                                 pdict&lt;/P&gt;&lt;P&gt;      "search for dictionary objects&lt;/P&gt;&lt;P&gt;                                                 pmess&lt;/P&gt;&lt;P&gt;      "Search for messages&lt;/P&gt;&lt;P&gt;                                                 pcust&lt;/P&gt;&lt;P&gt;      "Customer data only&lt;/P&gt;&lt;P&gt;                                                 customernamespace.&lt;/P&gt;&lt;P&gt;        "Customer name range&lt;/P&gt;&lt;P&gt;      ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Select programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN rprog.&lt;/P&gt;&lt;P&gt;      IF pprog+0(1) CA asterix.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Restrict the search to customer objects only.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        pcust = 'X'.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      PERFORM retrieveprograms USING iprograms[]&lt;/P&gt;&lt;P&gt;                                     ifunctions[]&lt;/P&gt;&lt;P&gt;                                     soprogramname[]    "Program name&lt;/P&gt;&lt;P&gt;                                     soauthor[]         "Author&lt;/P&gt;&lt;P&gt;                           customernamespace  "Customer nam range&lt;/P&gt;&lt;P&gt;                           pmod               "Also modifiedby author&lt;/P&gt;&lt;P&gt;                           pcust              "Customer object only&lt;/P&gt;&lt;P&gt;                                     pmess              "Find messages&lt;/P&gt;&lt;P&gt;                                     ptext              "Text Elements&lt;/P&gt;&lt;P&gt;                                     pdict         "Dictionaystructures&lt;/P&gt;&lt;P&gt;                                     pfunc            "Get functions&lt;/P&gt;&lt;P&gt;                                     pinc               "Get includes&lt;/P&gt;&lt;P&gt;                                     pscr               "Get screens&lt;/P&gt;&lt;P&gt;       precf              "Search recursively for functions&lt;/P&gt;&lt;P&gt;       preci              "Searchrecursively for includes&lt;/P&gt;&lt;P&gt;                                    p$tmp              "local objects&lt;/P&gt;&lt;P&gt;                                     ppack.             "Package&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;end-of-selection&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;END-OF-SELECTION.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF forcedexit = 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Set the file extension and output type of the file&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF ptxt IS INITIAL.&lt;/P&gt;&lt;P&gt;      downloadfileextension = htmlextension.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      downloadfileextension = textextension.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Decide what to download&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CASE 'X'.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Download tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      WHEN rtable.&lt;/P&gt;&lt;P&gt;        IF NOT ( idictionary[] IS INITIAL ).&lt;/P&gt;&lt;P&gt;          PERFORM downloadddstructures USING idictionary[]&lt;/P&gt;&lt;P&gt;                                             pfolder&lt;/P&gt;&lt;P&gt;                                             htmlextension&lt;/P&gt;&lt;P&gt;                                             space&lt;/P&gt;&lt;P&gt;                                             psortt.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Free up any memory used for caching HTML versions of tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          LOOP AT idictionary.&lt;/P&gt;&lt;P&gt;            FREE MEMORY ID idictionary-tablename.&lt;/P&gt;&lt;P&gt;          ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          GET TIME.&lt;/P&gt;&lt;P&gt;          runtime = sy-uzeit - starttime.&lt;/P&gt;&lt;P&gt;          PERFORM filltreenodetables USING idictionary[]&lt;/P&gt;&lt;P&gt;                                           itreedisplay[]&lt;/P&gt;&lt;P&gt;                                           runtime.&lt;/P&gt;&lt;P&gt;          CLEAR idictionary[].&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Download message class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      WHEN rmess.&lt;/P&gt;&lt;P&gt;        IF NOT ( imessages[] IS INITIAL ).&lt;/P&gt;&lt;P&gt;          SORT imessages ASCENDING BY arbgb msgnr.&lt;/P&gt;&lt;P&gt;          LOOP AT imessages.&lt;/P&gt;&lt;P&gt;            APPEND imessages TO isinglemessageclass.&lt;/P&gt;&lt;P&gt;            AT END OF arbgb.&lt;/P&gt;&lt;P&gt;              PERFORM downloadmessageclass USING isinglemessageclass[]&lt;/P&gt;&lt;P&gt;                                                 imessages-arbgb&lt;/P&gt;&lt;P&gt;                                                 pfolder&lt;/P&gt;&lt;P&gt;                                                 downloadfileextension&lt;/P&gt;&lt;P&gt;                                                 phtml&lt;/P&gt;&lt;P&gt;                                                 space&lt;/P&gt;&lt;P&gt;                                                 pcomm&lt;/P&gt;&lt;P&gt;                                                 customernamespace&lt;/P&gt;&lt;P&gt;                                                 pinc&lt;/P&gt;&lt;P&gt;                                                 pdict&lt;/P&gt;&lt;P&gt;                                                 pmess.&lt;/P&gt;&lt;P&gt;              CLEAR isinglemessageclass[].&lt;/P&gt;&lt;P&gt;            ENDAT.&lt;/P&gt;&lt;P&gt;          ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          GET TIME.&lt;/P&gt;&lt;P&gt;          runtime = sy-uzeit - starttime.&lt;/P&gt;&lt;P&gt;          PERFORM filltreenodemessages USING imessages[]&lt;/P&gt;&lt;P&gt;                                             itreedisplay[]&lt;/P&gt;&lt;P&gt;                                             runtime.&lt;/P&gt;&lt;P&gt;          CLEAR imessages[].&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Download functions&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      WHEN rfunc.&lt;/P&gt;&lt;P&gt;        IF NOT ( ifunctions[] IS INITIAL ).&lt;/P&gt;&lt;P&gt;          PERFORM downloadfunctions USING ifunctions[]&lt;/P&gt;&lt;P&gt;                                          pfolder&lt;/P&gt;&lt;P&gt;                                          downloadfileextension&lt;/P&gt;&lt;P&gt;                                          space&lt;/P&gt;&lt;P&gt;                                          pdoc&lt;/P&gt;&lt;P&gt;                                          phtml&lt;/P&gt;&lt;P&gt;                                          pcomm&lt;/P&gt;&lt;P&gt;                                          customernamespace&lt;/P&gt;&lt;P&gt;                                          pinc&lt;/P&gt;&lt;P&gt;                                          pdict&lt;/P&gt;&lt;P&gt;                                          textextension&lt;/P&gt;&lt;P&gt;                                          htmlextension&lt;/P&gt;&lt;P&gt;                                          psortt.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Free up any memory used for caching HTML versions of tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          LOOP AT ifunctions.&lt;/P&gt;&lt;P&gt;            LOOP AT ifunctions-idictstruct ASSIGNING &amp;lt;wadictstruct&amp;gt;.&lt;/P&gt;&lt;P&gt;              FREE MEMORY ID &amp;lt;wadictstruct&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;            ENDLOOP.&lt;/P&gt;&lt;P&gt;          ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          GET TIME.&lt;/P&gt;&lt;P&gt;          runtime = sy-uzeit - starttime.&lt;/P&gt;&lt;P&gt;          PERFORM filltreenodefunctions USING ifunctions[]&lt;/P&gt;&lt;P&gt;                                              itreedisplay[]&lt;/P&gt;&lt;P&gt;                                              runtime.&lt;/P&gt;&lt;P&gt;          CLEAR ifunctions[].&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Download Classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      WHEN rclass.&lt;/P&gt;&lt;P&gt;        IF NOT ( iclasses[] IS INITIAL ).&lt;/P&gt;&lt;P&gt;          PERFORM downloadclasses USING iclasses[]&lt;/P&gt;&lt;P&gt;                                        ifunctions[]&lt;/P&gt;&lt;P&gt;                                        pfolder&lt;/P&gt;&lt;P&gt;                                        downloadfileextension&lt;/P&gt;&lt;P&gt;                                        htmlextension&lt;/P&gt;&lt;P&gt;                                        textextension&lt;/P&gt;&lt;P&gt;                                        phtml&lt;/P&gt;&lt;P&gt;                                        pcomm&lt;/P&gt;&lt;P&gt;                                        customernamespace&lt;/P&gt;&lt;P&gt;                                        pinc&lt;/P&gt;&lt;P&gt;                                        pdict&lt;/P&gt;&lt;P&gt;                                        pdoc&lt;/P&gt;&lt;P&gt;                                        psortt.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Free up any memory used for caching HTML versions of tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          LOOP AT ifunctions.&lt;/P&gt;&lt;P&gt;            LOOP AT ifunctions-idictstruct ASSIGNING &amp;lt;wadictstruct&amp;gt;..&lt;/P&gt;&lt;P&gt;              FREE MEMORY ID &amp;lt;wadictstruct&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;            ENDLOOP.&lt;/P&gt;&lt;P&gt;          ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Free up any memory used for caching HTML versions of tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          LOOP AT iprograms.&lt;/P&gt;&lt;P&gt;            LOOP AT iprograms-idictstruct ASSIGNING &amp;lt;wadictstruct&amp;gt;..&lt;/P&gt;&lt;P&gt;              FREE MEMORY ID &amp;lt;wadictstruct&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;            ENDLOOP.&lt;/P&gt;&lt;P&gt;          ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          GET TIME.&lt;/P&gt;&lt;P&gt;          runtime = sy-uzeit - starttime.&lt;/P&gt;&lt;P&gt;          PERFORM filltreenodeclasses USING iclasses[]&lt;/P&gt;&lt;P&gt;                                            ifunctions[]&lt;/P&gt;&lt;P&gt;                                            itreedisplay[]&lt;/P&gt;&lt;P&gt;                                            runtime.&lt;/P&gt;&lt;P&gt;          CLEAR iclasses[].&lt;/P&gt;&lt;P&gt;          CLEAR ifunctions[].&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Download programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      WHEN rprog.&lt;/P&gt;&lt;P&gt;        IF NOT ( iprograms[] IS INITIAL ).&lt;/P&gt;&lt;P&gt;          PERFORM downloadprograms USING iprograms[]&lt;/P&gt;&lt;P&gt;                                         ifunctions[]&lt;/P&gt;&lt;P&gt;                                         pfolder&lt;/P&gt;&lt;P&gt;                                         downloadfileextension&lt;/P&gt;&lt;P&gt;                                         htmlextension&lt;/P&gt;&lt;P&gt;                                         textextension&lt;/P&gt;&lt;P&gt;                                         phtml&lt;/P&gt;&lt;P&gt;                                         pcomm&lt;/P&gt;&lt;P&gt;                                         customernamespace&lt;/P&gt;&lt;P&gt;                                         pinc&lt;/P&gt;&lt;P&gt;                                         pdict&lt;/P&gt;&lt;P&gt;                                         pdoc&lt;/P&gt;&lt;P&gt;                                         psortt.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Free up any memory used for caching HTML versions of tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          LOOP AT ifunctions.&lt;/P&gt;&lt;P&gt;            LOOP AT ifunctions-idictstruct ASSIGNING &amp;lt;wadictstruct&amp;gt;..&lt;/P&gt;&lt;P&gt;              FREE MEMORY ID &amp;lt;wadictstruct&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;            ENDLOOP.&lt;/P&gt;&lt;P&gt;          ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Free up any memory used for caching HTML versions of tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          LOOP AT iprograms.&lt;/P&gt;&lt;P&gt;            LOOP AT iprograms-idictstruct ASSIGNING &amp;lt;wadictstruct&amp;gt;..&lt;/P&gt;&lt;P&gt;              FREE MEMORY ID &amp;lt;wadictstruct&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;            ENDLOOP.&lt;/P&gt;&lt;P&gt;          ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          GET TIME.&lt;/P&gt;&lt;P&gt;          runtime = sy-uzeit - starttime.&lt;/P&gt;&lt;P&gt;          PERFORM filltreenodeprograms USING iprograms[]&lt;/P&gt;&lt;P&gt;                                             ifunctions[]&lt;/P&gt;&lt;P&gt;                                             itreedisplay[]&lt;/P&gt;&lt;P&gt;                                             runtime.&lt;/P&gt;&lt;P&gt;          CLEAR iprograms[].&lt;/P&gt;&lt;P&gt;          CLEAR ifunctions[].&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;    ENDCASE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF NOT ( itreedisplay[] IS INITIAL ).&lt;/P&gt;&lt;P&gt;      PERFORM displaytree USING itreedisplay[].&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      statusbarmessage = 'No items found matching selection criteria'.&lt;/P&gt;&lt;P&gt;      PERFORM displaystatus USING statusbarmessage 1.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*--- Memory IDs&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;User name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MAUTH' FIELD pauth.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Table name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MTABLE' FIELD ptable.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Message class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MMNAME' FIELD pmname.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Function&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MFNAME' FIELD pfname.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Function group&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MFGROUP' FIELD pfgroup.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MCNAME' FIELD pclname.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Program&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MPROG' FIELD pprog.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Customer namespace&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MNAMESPACE' FIELD pcname.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Folder&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MFOLDER' FIELD pfolder.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Package&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MPACK' FIELD ppack.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Text element checkbox&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MTEXT' FIELD ptext.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Messages checkbox&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MMESS' FIELD pmess.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Includes checkbox&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MINC' FIELD pinc.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Recursive includes checkbox.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MRECI' FIELD preci.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Functions checkbox&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MFUNC' FIELD pfunc.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Recursive functions checkbox&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MRECF' FIELD precf.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Function module documntation checkbox&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MDOC' FIELD pdoc.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Screens checkbox&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MSCR' FIELD pscr.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Dictionary checkbox&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MDICT' FIELD pdict.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Sort table ascending checkBox&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SET PARAMETER ID 'MSORTT' FIELD psortt.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;********************************&lt;/P&gt;&lt;P&gt;****************************************&lt;STRONG&gt;SUBROUTINES&lt;/STRONG&gt;*******************&lt;/P&gt;&lt;P&gt;********************************&lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;********************************&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; checkComboBoxes...  Check input parameters&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM checkcomboboxes.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF pauth IS INITIAL.&lt;/P&gt;&lt;P&gt;    CASE 'X'.&lt;/P&gt;&lt;P&gt;      WHEN rtable.&lt;/P&gt;&lt;P&gt;        IF ptable IS INITIAL.&lt;/P&gt;&lt;P&gt;          statusbarmessage = 'You must enter either a table name or author.'.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      WHEN rfunc.&lt;/P&gt;&lt;P&gt;        IF ( pfname IS INITIAL ) AND ( pfgroup IS INITIAL ).&lt;/P&gt;&lt;P&gt;          IF pfname IS INITIAL.&lt;/P&gt;&lt;P&gt;            statusbarmessage = 'You must enter either a function name or author.'.&lt;/P&gt;&lt;P&gt;          ELSE.&lt;/P&gt;&lt;P&gt;            IF pfgroup IS INITIAL.&lt;/P&gt;&lt;P&gt;              statusbarmessage = 'Must enter either a func gp, or an author name.'.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      WHEN rprog.&lt;/P&gt;&lt;P&gt;        IF pprog IS INITIAL.&lt;/P&gt;&lt;P&gt;            statusbarmessage = 'You must enter either a program name or&lt;/P&gt;&lt;P&gt;author name.'.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;    ENDCASE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Check the user name of the person objects are to be downloaded for&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    IF pauth = 'SAP*' OR pauth = 'SAP'.&lt;/P&gt;&lt;P&gt;      statusbarmessage = 'Sorry cannot download all objects for SAP&lt;/P&gt;&lt;P&gt;standard user'.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT statusbarmessage IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM displaystatus USING statusbarmessage 3.&lt;/P&gt;&lt;P&gt;    forcedexit = 1.&lt;/P&gt;&lt;P&gt;    STOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"checkComboBoxes&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;fillSelectionRanges...      for selection routines&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM fillselectionranges.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: valuetofind TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT pauth IS INITIAL.&lt;/P&gt;&lt;P&gt;    soauthor-sign = 'I'.&lt;/P&gt;&lt;P&gt;    soauthor-option = 'EQ'.&lt;/P&gt;&lt;P&gt;    soauthor-low = pauth.&lt;/P&gt;&lt;P&gt;    APPEND soauthor.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT ptable IS INITIAL.&lt;/P&gt;&lt;P&gt;    IF NOT pcname IS INITIAL AND NOT ptable+0(1) = '/'.&lt;/P&gt;&lt;P&gt;      CONCATENATE pcname ptable INTO valuetofind.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      valuetofind = ptable.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;    sotable-sign = 'I'.&lt;/P&gt;&lt;P&gt;    sotable-option = 'EQ'.&lt;/P&gt;&lt;P&gt;    sotable-low = valuetofind.&lt;/P&gt;&lt;P&gt;    APPEND sotable.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT pfname IS INITIAL.&lt;/P&gt;&lt;P&gt;    IF NOT pcname IS INITIAL AND NOT pfname+0(1) = '/'.&lt;/P&gt;&lt;P&gt;      CONCATENATE pcname pfname INTO valuetofind.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      valuetofind = pfname.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;    sofunctionname-sign = 'I'.&lt;/P&gt;&lt;P&gt;    PERFORM addoption USING valuetofind sofunctionname-option.&lt;/P&gt;&lt;P&gt;    sofunctionname-low = valuetofind.&lt;/P&gt;&lt;P&gt;    APPEND sofunctionname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT pfgroup IS INITIAL.&lt;/P&gt;&lt;P&gt;    IF NOT pcname IS INITIAL AND NOT pfgroup+0(1) = '/'.&lt;/P&gt;&lt;P&gt;      CONCATENATE pcname pfgroup INTO valuetofind.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      valuetofind = pfgroup.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;    sofunctiongroup-sign = 'I'.&lt;/P&gt;&lt;P&gt;    PERFORM addoption USING valuetofind sofunctiongroup-option.&lt;/P&gt;&lt;P&gt;    sofunctiongroup-low = valuetofind.&lt;/P&gt;&lt;P&gt;    APPEND sofunctiongroup.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT pclname IS INITIAL.&lt;/P&gt;&lt;P&gt;    IF NOT pcname IS INITIAL AND NOT pclname+0(1) = '/'.&lt;/P&gt;&lt;P&gt;      CONCATENATE pcname pclname INTO valuetofind.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      valuetofind = pclname.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;    soclassname-sign = 'I'.&lt;/P&gt;&lt;P&gt;    PERFORM addoption USING valuetofind soclassname-option.&lt;/P&gt;&lt;P&gt;    soclassname-low = valuetofind.&lt;/P&gt;&lt;P&gt;    APPEND soclassname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT pprog IS INITIAL.&lt;/P&gt;&lt;P&gt;    IF NOT pcname IS INITIAL AND NOT pprog+0(1) = '/'.&lt;/P&gt;&lt;P&gt;      CONCATENATE pcname pprog INTO valuetofind.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      valuetofind = pprog.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;    soprogramname-sign = 'I'.&lt;/P&gt;&lt;P&gt;    PERFORM addoption USING valuetofind soprogramname-option.&lt;/P&gt;&lt;P&gt;    soprogramname-low = valuetofind.&lt;/P&gt;&lt;P&gt;    APPEND soprogramname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;" fillSelectionRanges&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; addOption...  fills the option value of ranges&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM addoption USING value(valuetofind)&lt;/P&gt;&lt;P&gt;                           option.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF valuetofind CA asterix.&lt;/P&gt;&lt;P&gt;    option = 'CP'.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    option = 'EQ'.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"addOption&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; retrieveTables...             Search for tables in dictionary&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM retrievetables USING ilocdictstructure LIKE idictionary[]&lt;/P&gt;&lt;P&gt;                          sotable LIKE sotable[]&lt;/P&gt;&lt;P&gt;                          soauthor LIKE soauthor[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: wadictstructure TYPE tdicttable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SELECT tabname FROM dd02l INTO wadictstructure-tablename&lt;/P&gt;&lt;P&gt;                            WHERE tabname IN sotable&lt;/P&gt;&lt;P&gt;                              AND tabclass &amp;lt;&amp;gt; 'CLUSTER'&lt;/P&gt;&lt;P&gt;                              AND tabclass &amp;lt;&amp;gt; 'POOL'&lt;/P&gt;&lt;P&gt;                              AND tabclass &amp;lt;&amp;gt; 'VIEW'&lt;/P&gt;&lt;P&gt;                              AND as4user IN soauthor&lt;/P&gt;&lt;P&gt;                              AND as4local = 'A'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM findtabledescription USING wadictstructure-tablename&lt;/P&gt;&lt;P&gt;                                       wadictstructure-tabletitle.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM findtabledefinition USING wadictstructure-tablename&lt;/P&gt;&lt;P&gt;                                      wadictstructure-istructure[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND wadictstructure TO ilocdictstructure.&lt;/P&gt;&lt;P&gt;    CLEAR wadictstructure.&lt;/P&gt;&lt;P&gt;  ENDSELECT.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"retrieveTables&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findTableDescription...  Search for table description in dictionary&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findtabledescription USING value(tablename)&lt;/P&gt;&lt;P&gt;                                      tabledescription.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SELECT SINGLE ddtext FROM dd02t INTO tabledescription&lt;/P&gt;&lt;P&gt;                                  WHERE tabname = tablename&lt;/P&gt;&lt;P&gt;                                    AND ddlanguage = sy-langu.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findTableDescription&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findTableDefinition... Find the structure of a table from the SAP&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*database.&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findtabledefinition USING value(tablename)&lt;/P&gt;&lt;P&gt;                               idictstruct LIKE dumidictstructure[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA gotstate LIKE dcobjif-gotstate.&lt;/P&gt;&lt;P&gt;  DATA dd02v_wa LIKE dd02v.&lt;/P&gt;&lt;P&gt;  DATA dd09l_wa LIKE dd09l.&lt;/P&gt;&lt;P&gt;  DATA: definition TYPE STANDARD TABLE OF dd03p WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: wadictstruct TYPE tdicttablestructure.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'DDIF_TABL_GET'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      name          = tablename&lt;/P&gt;&lt;P&gt;      state         = 'A'&lt;/P&gt;&lt;P&gt;      langu         = sy-langu&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      gotstate      = gotstate&lt;/P&gt;&lt;P&gt;      dd02v_wa      = dd02v_wa&lt;/P&gt;&lt;P&gt;      dd09l_wa      = dd09l_wa&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      dd03p_tab     = definition&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      illegal_input = 1&lt;/P&gt;&lt;P&gt;      OTHERS        = 2.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF sy-subrc = 0 AND gotstate = 'A'.&lt;/P&gt;&lt;P&gt;    LOOP AT definition.&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING definition TO wadictstruct.&lt;/P&gt;&lt;P&gt;      PERFORM removeleadingzeros CHANGING wadictstruct-position.&lt;/P&gt;&lt;P&gt;      PERFORM removeleadingzeros CHANGING wadictstruct-leng.&lt;/P&gt;&lt;P&gt;      APPEND wadictstruct TO idictstruct.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findTableDefinition&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; retrieveMessageClass.Retrieve a message class from the SAPdatabase&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM retrievemessageclass USING ilocmessages LIKE imessages[]&lt;/P&gt;&lt;P&gt;                                rangeauthor LIKE soauthor[]&lt;/P&gt;&lt;P&gt;                                value(messageclassname)&lt;/P&gt;&lt;P&gt;                                value(messageclasslang)&lt;/P&gt;&lt;P&gt;                                value(modifiedby).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: wamessage TYPE tmessage.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT messageclassname IS INITIAL.&lt;/P&gt;&lt;P&gt;    SELECT * FROM t100&lt;/P&gt;&lt;P&gt;             APPENDING CORRESPONDING FIELDS OF TABLE ilocmessages&lt;/P&gt;&lt;P&gt;             WHERE sprsl = messageclasslang&lt;/P&gt;&lt;P&gt;               AND arbgb = messageclassname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    LOOP AT ilocmessages INTO wamessage.&lt;/P&gt;&lt;P&gt;      SELECT SINGLE stext FROM t100a&lt;/P&gt;&lt;P&gt;                          INTO wamessage-stext WHERE arbgb =&lt;/P&gt;&lt;P&gt;      wamessage-arbgb.&lt;/P&gt;&lt;P&gt;      MODIFY ilocmessages FROM wamessage INDEX sy-tabix.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    IF modifiedby IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Select by author&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT t100~arbgb&lt;/P&gt;&lt;P&gt;             t100~msgnr&lt;/P&gt;&lt;P&gt;             t100~text&lt;/P&gt;&lt;P&gt;             t100a~stext&lt;/P&gt;&lt;P&gt;             APPENDING CORRESPONDING FIELDS OF TABLE ilocmessages&lt;/P&gt;&lt;P&gt;               FROM t100&lt;/P&gt;&lt;P&gt;               INNER JOIN t100a ON t100a&lt;SUB&gt;arbgb = t100&lt;/SUB&gt;arbgb&lt;/P&gt;&lt;P&gt;               WHERE t100a~masterlang = messageclasslang AND&lt;/P&gt;&lt;P&gt;      t100a~respuser IN rangeauthor[].&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Select also by the last person who modified the message class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT t100~arbgb&lt;/P&gt;&lt;P&gt;             t100~msgnr&lt;/P&gt;&lt;P&gt;             t100~text&lt;/P&gt;&lt;P&gt;             t100a~stext&lt;/P&gt;&lt;P&gt;             APPENDING CORRESPONDING FIELDS OF TABLE ilocmessages&lt;/P&gt;&lt;P&gt;             FROM t100&lt;/P&gt;&lt;P&gt;             INNER JOIN t100a ON t100a&lt;SUB&gt;arbgb = t100&lt;/SUB&gt;arbgb&lt;/P&gt;&lt;P&gt;             WHERE t100a~masterlang = messageclasslang&lt;/P&gt;&lt;P&gt;               AND t100a~respuser IN rangeauthor[]&lt;/P&gt;&lt;P&gt;               AND t100a~lastuser IN rangeauthor[].&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"retrieveMessageClass&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; retrieveFunctions...Retrieve function modules from SAP DB.  May be&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;called in one of two ways&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM retrievefunctions USING sofname LIKE sofunctionname[]&lt;/P&gt;&lt;P&gt;                             sofgroup LIKE sofunctiongroup[]&lt;/P&gt;&lt;P&gt;                             ifunctionnames LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                             value(author)&lt;/P&gt;&lt;P&gt;                             value(gettextelements)&lt;/P&gt;&lt;P&gt;                             value(getscreens)&lt;/P&gt;&lt;P&gt;                             value(customeronly)&lt;/P&gt;&lt;P&gt;                             value(customernamerange).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  RANGES: rangefuncname  FOR tfdir-funcname.&lt;/P&gt;&lt;P&gt;  RANGES: rangefuncgroup FOR enlfdir-area.&lt;/P&gt;&lt;P&gt;  DATA: wafunctionname TYPE tfunction.&lt;/P&gt;&lt;P&gt;  DATA: previousfg TYPE v_fdir-area.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  rangefuncname[] = sofname[].&lt;/P&gt;&lt;P&gt;  rangefuncgroup[] = sofgroup[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT pauth IS INITIAL AND ( sofname[] IS INITIAL AND sofgroup IS&lt;/P&gt;&lt;P&gt;  INITIAL ).&lt;/P&gt;&lt;P&gt;*-- Need to select all function groups by author&lt;/P&gt;&lt;P&gt;    SELECT area FROM tlibv INTO rangefuncgroup-low WHERE uname = author.&lt;/P&gt;&lt;P&gt;      rangefuncgroup-sign = 'I'.&lt;/P&gt;&lt;P&gt;      rangefuncgroup-option = 'EQ'.&lt;/P&gt;&lt;P&gt;      APPEND rangefuncgroup.&lt;/P&gt;&lt;P&gt;    ENDSELECT.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*--- select by function name and/or function group.&lt;/P&gt;&lt;P&gt;  SELECT funcname area FROM v_fdir&lt;/P&gt;&lt;P&gt;                  INTO (wafunctionname-functionname,&lt;/P&gt;&lt;P&gt;  wafunctionname-functiongroup)&lt;/P&gt;&lt;P&gt;                  WHERE funcname IN rangefuncname&lt;/P&gt;&lt;P&gt;                    AND area IN rangefuncgroup&lt;/P&gt;&lt;P&gt;                    AND generated = ''&lt;/P&gt;&lt;P&gt;                    ORDER BY area.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM retrievefunctiondetail USING wafunctionname-functionname&lt;/P&gt;&lt;P&gt;                                         wafunctionname-progname&lt;/P&gt;&lt;P&gt;                                         wafunctionname-includenumber&lt;/P&gt;&lt;P&gt;                                         wafunctionname-functiontitle.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM findmainfunctioninclude USING wafunctionname-progname&lt;/P&gt;&lt;P&gt;                                          wafunctionname-includenumber&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    wafunctionname-functionmaininclude.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM findfunctiontopinclude USING wafunctionname-progname&lt;/P&gt;&lt;P&gt;                                         wafunctionname-topincludename.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Find all user defined includes within the function group&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM scanforfunctionincludes USING wafunctionname-progname&lt;/P&gt;&lt;P&gt;                                          customeronly&lt;/P&gt;&lt;P&gt;                                          customernamerange&lt;/P&gt;&lt;P&gt;                                          wafunctionname-iincludes[].&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Find main message class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM findmainmessageclass USING wafunctionname-progname&lt;/P&gt;&lt;P&gt;                                       wafunctionname-messageclass.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Find any screens declared within the main include&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT getscreens IS INITIAL.&lt;/P&gt;&lt;P&gt;      IF previousfg IS INITIAL&lt;/P&gt;&lt;P&gt;         OR previousfg &amp;lt;&amp;gt; wafunctionname-functiongroup.&lt;/P&gt;&lt;P&gt;        PERFORM findfunctionscreenflow USING wafunctionname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Search for any GUI texts&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        PERFORM retrieveguititles USING wafunctionname-iguititle[]&lt;/P&gt;&lt;P&gt;                                        wafunctionname-progname.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF NOT gettextelements IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Find the program texts from out of the database.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      PERFORM retrieveprogramtexts USING&lt;/P&gt;&lt;P&gt;      wafunctionname-iselectiontexts[]&lt;/P&gt;&lt;P&gt;                                         wafunctionname-itextelements[]&lt;/P&gt;&lt;P&gt;                                         wafunctionname-progname.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND wafunctionname TO ifunctionnames.&lt;/P&gt;&lt;P&gt;    previousfg = wafunctionname-functiongroup.&lt;/P&gt;&lt;P&gt;    CLEAR wafunctionname.&lt;/P&gt;&lt;P&gt;  ENDSELECT.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"retrieveFunctions&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; retrieveFunctionDetail...   Retrieve function module details from&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*SAPDB.&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM retrievefunctiondetail USING value(functionname)&lt;/P&gt;&lt;P&gt;                                        progname&lt;/P&gt;&lt;P&gt;                                        includename&lt;/P&gt;&lt;P&gt;                                        titletext.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SELECT SINGLE pname include&lt;/P&gt;&lt;P&gt;                FROM tfdir&lt;/P&gt;&lt;P&gt;                INTO (progname, includename)&lt;/P&gt;&lt;P&gt;                WHERE funcname = functionname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;    SELECT SINGLE stext FROM tftit&lt;/P&gt;&lt;P&gt;                  INTO titletext&lt;/P&gt;&lt;P&gt;                  WHERE spras = sy-langu&lt;/P&gt;&lt;P&gt;                    AND funcname = functionname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"retrieveFunctionDetail&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findMainFunctionInclude...  Find the main include that contains the&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*source code&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findmainfunctioninclude USING value(programname)&lt;/P&gt;&lt;P&gt;                                   value(includeno)&lt;/P&gt;&lt;P&gt;                                         internalincludename.&lt;/P&gt;&lt;P&gt;  DATA: newincludenumber TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE '%U' includeno INTO newincludenumber.&lt;/P&gt;&lt;P&gt;  SELECT SINGLE include FROM d010inc&lt;/P&gt;&lt;P&gt;                        INTO internalincludename&lt;/P&gt;&lt;P&gt;                        WHERE master = programname&lt;/P&gt;&lt;P&gt;                        AND include LIKE newincludenumber.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findMainFunctionInclude&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findFunctionTopInclude...  Find the top include for the function&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*group&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findfunctiontopinclude USING value(programname)&lt;/P&gt;&lt;P&gt;                                        topincludename.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SELECT SINGLE include FROM d010inc&lt;/P&gt;&lt;P&gt;                        INTO topincludename&lt;/P&gt;&lt;P&gt;                        WHERE master = programname&lt;/P&gt;&lt;P&gt;                        AND include LIKE '%TOP'.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findFunctionTopInclude&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*scanForAdditionalFuncStuffSearch for additional things relating&lt;/P&gt;&lt;P&gt;*tofunctions&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM scanforadditionalfuncstuff USING ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                                      value(recursiveincludes)&lt;/P&gt;&lt;P&gt;                                      value(recursivefunctions)&lt;/P&gt;&lt;P&gt;                                      value(searchforincludes)&lt;/P&gt;&lt;P&gt;                                      value(searchforfunctions)&lt;/P&gt;&lt;P&gt;                                      value(searchfordictionary)&lt;/P&gt;&lt;P&gt;                                      value(searchformessages)&lt;/P&gt;&lt;P&gt;                                      value(customeronly)&lt;/P&gt;&lt;P&gt;                                      value(customernamerange).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: wafunction TYPE tfunction.&lt;/P&gt;&lt;P&gt;  DATA: wainclude TYPE tinclude.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocfunctions INTO wafunction.&lt;/P&gt;&lt;P&gt;    IF NOT searchforincludes IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Search in the main include&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      PERFORM scanforincludeprograms USING&lt;/P&gt;&lt;P&gt;      wafunction-functionmaininclude&lt;/P&gt;&lt;P&gt;                                           recursiveincludes&lt;/P&gt;&lt;P&gt;                                           customeronly&lt;/P&gt;&lt;P&gt;                                           customernamerange&lt;/P&gt;&lt;P&gt;                                           wafunction-iincludes[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Search in the top include&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      PERFORM scanforincludeprograms USING wafunction-topincludename&lt;/P&gt;&lt;P&gt;                                           recursiveincludes&lt;/P&gt;&lt;P&gt;                                           customeronly&lt;/P&gt;&lt;P&gt;                                           customernamerange&lt;/P&gt;&lt;P&gt;                                           wafunction-iincludes[].&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF NOT searchforfunctions IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM scanforfunctions USING wafunction-functionmaininclude&lt;/P&gt;&lt;P&gt;                                     wafunction-programlinkname&lt;/P&gt;&lt;P&gt;                                     recursiveincludes&lt;/P&gt;&lt;P&gt;                                     recursivefunctions&lt;/P&gt;&lt;P&gt;                                     customeronly&lt;/P&gt;&lt;P&gt;                                     customernamerange&lt;/P&gt;&lt;P&gt;                                     ilocfunctions[].&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    MODIFY ilocfunctions FROM wafunction.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Now we have everthing perhaps we had better find all the dictionary&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; structures&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT searchfordictionary IS INITIAL.&lt;/P&gt;&lt;P&gt;    LOOP AT ilocfunctions INTO wafunction.&lt;/P&gt;&lt;P&gt;      PERFORM scanfortables USING wafunction-progname&lt;/P&gt;&lt;P&gt;                                  customeronly&lt;/P&gt;&lt;P&gt;                                  customernamerange&lt;/P&gt;&lt;P&gt;                                  wafunction-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      PERFORM scanforlikeortype USING wafunction-progname&lt;/P&gt;&lt;P&gt;                                      customeronly&lt;/P&gt;&lt;P&gt;                                      customernamerange&lt;/P&gt;&lt;P&gt;                                      wafunction-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      LOOP AT wafunction-iincludes INTO wainclude.&lt;/P&gt;&lt;P&gt;        PERFORM scanfortables USING wainclude-includename&lt;/P&gt;&lt;P&gt;                                    customeronly&lt;/P&gt;&lt;P&gt;                                    customernamerange&lt;/P&gt;&lt;P&gt;                                    wafunction-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        PERFORM scanforlikeortype USING wainclude-includename&lt;/P&gt;&lt;P&gt;                                        customeronly&lt;/P&gt;&lt;P&gt;                                        customernamerange&lt;/P&gt;&lt;P&gt;                                        wafunction-idictstruct[].&lt;/P&gt;&lt;P&gt;      ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      MODIFY ilocfunctions FROM wafunction.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Now search for all messages&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT searchformessages IS INITIAL.&lt;/P&gt;&lt;P&gt;    LOOP AT ilocfunctions INTO wafunction.&lt;/P&gt;&lt;P&gt;      PERFORM scanformessages USING wafunction-progname&lt;/P&gt;&lt;P&gt;                                    wafunction-messageclass&lt;/P&gt;&lt;P&gt;                                    wafunction-imessages[].&lt;/P&gt;&lt;P&gt;      MODIFY ilocfunctions FROM wafunction.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"scanForAdditionalFuncStuff&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;scanForClasses... Search each class or method for other classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;FORM scanforclasses USING value(classname)&lt;/P&gt;&lt;P&gt;                          value(classlinkname)&lt;/P&gt;&lt;P&gt;                          value(customeronly)&lt;/P&gt;&lt;P&gt;                          value(customernamerange)&lt;/P&gt;&lt;P&gt;                                ilocclasses LIKE iclasses[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA ilines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: head TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: tail TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: linelength TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  DATA: waline TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: waclass TYPE tclass.&lt;/P&gt;&lt;P&gt;  DATA: castclassname TYPE program.&lt;/P&gt;&lt;P&gt;  DATA: exceptioncustomernamerange TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Build the name of the possible cusotmer exception classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CONCATENATE customernamerange 'CX_' INTO  exceptioncustomernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read the program code from the textpool.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  castclassname = classname.&lt;/P&gt;&lt;P&gt;  READ REPORT castclassname INTO ilines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilines INTO waline.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Find custom tables.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    linelength = STRLEN( waline ).&lt;/P&gt;&lt;P&gt;    IF linelength &amp;gt; 0.&lt;/P&gt;&lt;P&gt;      IF waline(1) = asterix.&lt;/P&gt;&lt;P&gt;        CONTINUE.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      TRANSLATE waline TO UPPER CASE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      FIND typerefto IN waline IGNORING CASE.&lt;/P&gt;&lt;P&gt;      IF sy-subrc = 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Have found a reference to another class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        SPLIT waline AT type INTO head tail.&lt;/P&gt;&lt;P&gt;        SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;        SPLIT tail AT 'REF' INTO head tail.&lt;/P&gt;&lt;P&gt;        SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;        SPLIT tail AT 'TO' INTO head tail.&lt;/P&gt;&lt;P&gt;        SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;        IF tail CS period.&lt;/P&gt;&lt;P&gt;          SPLIT tail AT period INTO head tail.&lt;/P&gt;&lt;P&gt;        ELSE.&lt;/P&gt;&lt;P&gt;          IF tail CS comma.&lt;/P&gt;&lt;P&gt;            SPLIT tail AT comma INTO head tail.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Try and find classes which are only referenced through static&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   mehods&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        FIND '=&amp;gt;' IN waline MATCH OFFSET sy-fdpos.&lt;/P&gt;&lt;P&gt;        IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;          head = waline+0(sy-fdpos).&lt;/P&gt;&lt;P&gt;          SHIFT head LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;          CONDENSE head.&lt;/P&gt;&lt;P&gt;          FIND 'call method' IN head IGNORING CASE.&lt;/P&gt;&lt;P&gt;          IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;            SHIFT head LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;            SPLIT head AT space INTO head tail.&lt;/P&gt;&lt;P&gt;            SPLIT tail AT space INTO head tail.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;          Should have the class name here&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;            head = tail.&lt;/P&gt;&lt;P&gt;          ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;          Still have a class name even though it does not have the&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       words call method in front&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;            IF waline CS '='.&lt;/P&gt;&lt;P&gt;              SPLIT waline AT '=' INTO tail head.&lt;/P&gt;&lt;P&gt;              SHIFT head LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;              SPLIT head AT '=' INTO head tail.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;            sy-subrc = 0.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;        TRY.&lt;/P&gt;&lt;P&gt;            IF head&lt;EM&gt;0(1) = 'Y' OR head&lt;/EM&gt;0(1) = 'Z' OR head CS&lt;/P&gt;&lt;P&gt;            customernamerange.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;          We have found a class best append it to our class table if&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       we do not already have it.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              READ TABLE ilocclasses INTO waclass WITH KEY clsname = head.&lt;/P&gt;&lt;P&gt;              IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;                IF head+0(3) = 'CX_'&lt;/P&gt;&lt;P&gt;                   OR head+0(4) = 'ZCX_'&lt;/P&gt;&lt;P&gt;                   OR head+0(4) = 'YCX_'&lt;/P&gt;&lt;P&gt;                   OR head CS exceptioncustomernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                  waclass-exceptionclass = true.&lt;/P&gt;&lt;P&gt;                ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                waclass-clsname = head.&lt;/P&gt;&lt;P&gt;                APPEND waclass TO ilocclasses.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          CATCH cx_sy_range_out_of_bounds.&lt;/P&gt;&lt;P&gt;        ENDTRY.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"scanForClasses&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;scanForIncludePrograms... Search each program for include programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM scanforincludeprograms USING value(programname)&lt;/P&gt;&lt;P&gt;                                  value(recursiveincludes)&lt;/P&gt;&lt;P&gt;                                  value(customeronly)&lt;/P&gt;&lt;P&gt;                                  value(customernamerange)&lt;/P&gt;&lt;P&gt;                                        ilocincludes LIKE dumiincludes[]&lt;/P&gt;&lt;P&gt;.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: iincludelines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: itokens TYPE STANDARD TABLE OF stokes WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: ikeywords TYPE STANDARD TABLE OF text20 WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: istatements TYPE STANDARD TABLE OF sstmnt WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: watokens TYPE stokes.&lt;/P&gt;&lt;P&gt;  DATA: wainclude TYPE tinclude.&lt;/P&gt;&lt;P&gt;  DATA: waincludeexists TYPE tinclude.&lt;/P&gt;&lt;P&gt;  DATA: maxlines TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: nextline TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: castprogramname TYPE program.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read the program code from the textpool.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  castprogramname = programname.&lt;/P&gt;&lt;P&gt;  READ REPORT castprogramname INTO iincludelines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  APPEND include TO ikeywords.&lt;/P&gt;&lt;P&gt;  SCAN ABAP-SOURCE iincludelines TOKENS INTO itokens WITH INCLUDES&lt;/P&gt;&lt;P&gt;  STATEMENTS INTO istatements KEYWORDS FROM ikeywords.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CLEAR iincludelines[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  maxlines = LINES( itokens ).&lt;/P&gt;&lt;P&gt;  LOOP AT itokens WHERE str = include AND type = 'I'.&lt;/P&gt;&lt;P&gt;    nextline = sy-tabix + 1.&lt;/P&gt;&lt;P&gt;    IF nextline &amp;lt;= maxlines.&lt;/P&gt;&lt;P&gt;      READ TABLE itokens INDEX nextline INTO watokens.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     Are we only to find customer includes?&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IF NOT customeronly IS INITIAL.&lt;/P&gt;&lt;P&gt;        TRY.&lt;/P&gt;&lt;P&gt;            IF watokens-str&lt;EM&gt;0(1) = 'Y' OR watokens-str&lt;/EM&gt;0(1) = 'Z' OR&lt;/P&gt;&lt;P&gt;            watokens-str CS customernamerange&lt;/P&gt;&lt;P&gt;               OR watokens-str&lt;EM&gt;0(2) = 'MZ' OR watokens-str&lt;/EM&gt;0(2) = 'MY'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;            ELSE.&lt;/P&gt;&lt;P&gt;              CONTINUE.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;        ENDTRY.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      wainclude-includename = watokens-str.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     Best find the program title text as well.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      PERFORM findprogramorincludetitle USING wainclude-includename&lt;/P&gt;&lt;P&gt;                                              wainclude-includetitle.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     Don't append the include if we already have it listed&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      READ TABLE ilocincludes INTO waincludeexists WITH KEY includename&lt;/P&gt;&lt;P&gt;      = wainclude-includename.&lt;/P&gt;&lt;P&gt;      IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;        APPEND wainclude TO ilocincludes.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        IF NOT recursiveincludes IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;         Do a recursive search for other includes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          PERFORM scanforincludeprograms USING wainclude-includename&lt;/P&gt;&lt;P&gt;                                               recursiveincludes&lt;/P&gt;&lt;P&gt;                                               customeronly&lt;/P&gt;&lt;P&gt;                                               customernamerange&lt;/P&gt;&lt;P&gt;                                               ilocincludes[].&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"scanForIncludePrograms&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;scanForFunctions... Search each program for function modules&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM scanforfunctions USING value(programname)&lt;/P&gt;&lt;P&gt;                            value(programlinkname)&lt;/P&gt;&lt;P&gt;                            value(recursiveincludes)&lt;/P&gt;&lt;P&gt;                            value(recursivefunctions)&lt;/P&gt;&lt;P&gt;                            value(customeronly)&lt;/P&gt;&lt;P&gt;                            value(customernamerange)&lt;/P&gt;&lt;P&gt;                                  ilocfunctions LIKE ifunctions[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: iincludelines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: itokens TYPE STANDARD TABLE OF stokes WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: istatements TYPE STANDARD TABLE OF sstmnt WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: watokens TYPE stokes.&lt;/P&gt;&lt;P&gt;  DATA: wafunction TYPE tfunction.&lt;/P&gt;&lt;P&gt;  DATA: wafunctioncomparison TYPE tfunction.&lt;/P&gt;&lt;P&gt;  DATA: maxlines TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: nextline TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: castprogramname TYPE program.&lt;/P&gt;&lt;P&gt;  DATA: skipthisloop TYPE i.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read the program code from the textpool.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  castprogramname = programname.&lt;/P&gt;&lt;P&gt;  READ REPORT castprogramname INTO iincludelines.&lt;/P&gt;&lt;P&gt;  SCAN ABAP-SOURCE iincludelines TOKENS INTO itokens WITH INCLUDES&lt;/P&gt;&lt;P&gt;  STATEMENTS INTO istatements.&lt;/P&gt;&lt;P&gt;  CLEAR iincludelines[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  maxlines = LINES( itokens ).&lt;/P&gt;&lt;P&gt;  LOOP AT itokens WHERE str = function AND type = 'I'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    nextline = sy-tabix + 1.&lt;/P&gt;&lt;P&gt;    IF nextline &amp;lt;= maxlines.&lt;/P&gt;&lt;P&gt;      READ TABLE itokens INDEX nextline INTO watokens.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     Are we only to find customer functions&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      skipthisloop = false.&lt;/P&gt;&lt;P&gt;      IF NOT customeronly IS INITIAL.&lt;/P&gt;&lt;P&gt;        TRY.&lt;/P&gt;&lt;P&gt;            IF watokens-str&lt;EM&gt;1(1) = 'Y' OR watokens-str&lt;/EM&gt;1(1) = 'Z' OR&lt;/P&gt;&lt;P&gt;            watokens-str CS customernamerange.&lt;/P&gt;&lt;P&gt;            ELSE.&lt;/P&gt;&lt;P&gt;              skipthisloop = true.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;          CLEANUP.&lt;/P&gt;&lt;P&gt;            skipthisloop = true.&lt;/P&gt;&lt;P&gt;        ENDTRY.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF skipthisloop = false.&lt;/P&gt;&lt;P&gt;        wafunction-functionname = watokens-str.&lt;/P&gt;&lt;P&gt;        REPLACE ALL OCCURRENCES OF '''' IN wafunction-functionname WITH&lt;/P&gt;&lt;P&gt;        ' '.&lt;/P&gt;&lt;P&gt;        CONDENSE wafunction-functionname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       Don't add a function if we alread have it listed.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        READ TABLE ilocfunctions WITH KEY functionname =&lt;/P&gt;&lt;P&gt;        wafunction-functionname INTO wafunctioncomparison.&lt;/P&gt;&lt;P&gt;        IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;         Add in the link name if the function is linked to a program&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          wafunction-programlinkname = programlinkname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;         Don't download functions which are called through an RFC&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;         destination&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          nextline = sy-tabix + 2.&lt;/P&gt;&lt;P&gt;          READ TABLE itokens INDEX nextline INTO watokens.&lt;/P&gt;&lt;P&gt;          IF watokens-str &amp;lt;&amp;gt; destination.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;           Find the function group&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;            SELECT SINGLE area FROM v_fdir INTO&lt;/P&gt;&lt;P&gt;      wafunction-functiongroup WHERE funcname = wafunction-functionname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;            IF sy-subrc = 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;             Best find the function number as well.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              PERFORM retrievefunctiondetail USING&lt;/P&gt;&lt;P&gt;              wafunction-functionname&lt;/P&gt;&lt;P&gt;                                                   wafunction-progname&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              wafunction-includenumber&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              wafunction-functiontitle.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              PERFORM findmainfunctioninclude USING wafunction-progname&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              wafunction-includenumber&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              wafunction-functionmaininclude.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              PERFORM findfunctiontopinclude USING wafunction-progname&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              wafunction-topincludename.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;             Find main message class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              PERFORM findmainmessageclass USING wafunction-progname&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              wafunction-messageclass.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              APPEND wafunction TO ilocfunctions.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;             Now lets search a little bit deeper and do a recursive&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;             search for other includes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              IF NOT recursiveincludes IS INITIAL.&lt;/P&gt;&lt;P&gt;                PERFORM scanforincludeprograms USING&lt;/P&gt;&lt;P&gt;                wafunction-functionmaininclude&lt;/P&gt;&lt;P&gt;                                                     recursiveincludes&lt;/P&gt;&lt;P&gt;                                                     customeronly&lt;/P&gt;&lt;P&gt;                                                     customernamerange&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                wafunction-iincludes[].&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;             Now lets search a little bit deeper and do a recursive&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;           search for other functions&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              IF NOT recursivefunctions IS INITIAL.&lt;/P&gt;&lt;P&gt;                PERFORM scanforfunctions USING&lt;/P&gt;&lt;P&gt;                wafunction-functionmaininclude&lt;/P&gt;&lt;P&gt;                                               space&lt;/P&gt;&lt;P&gt;                                               recursiveincludes&lt;/P&gt;&lt;P&gt;                                               recursivefunctions&lt;/P&gt;&lt;P&gt;                                               customeronly&lt;/P&gt;&lt;P&gt;                                               customernamerange&lt;/P&gt;&lt;P&gt;                                               ilocfunctions[].&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt;              CLEAR wafunction.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CLEAR wafunction.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"scanForFunctions&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; scanForFunctionIncludes... Find all user defined includes within the&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*function group&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM scanforfunctionincludes USING poolname&lt;/P&gt;&lt;P&gt;                                   value(customeronly)&lt;/P&gt;&lt;P&gt;                                   value(customernamerange)&lt;/P&gt;&lt;P&gt;                                   ilocincludes LIKE dumiincludes[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: iincludelines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: itokens TYPE STANDARD TABLE OF stokes WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: ikeywords TYPE STANDARD TABLE OF text20 WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: istatements TYPE STANDARD TABLE OF sstmnt WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: watokens TYPE stokes.&lt;/P&gt;&lt;P&gt;  DATA: wainclude TYPE tinclude.&lt;/P&gt;&lt;P&gt;  DATA: waincludeexists TYPE tinclude.&lt;/P&gt;&lt;P&gt;  DATA: maxlines TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: nextline TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: castprogramname TYPE program.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read the program code from the textpool.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  castprogramname = poolname.&lt;/P&gt;&lt;P&gt;  READ REPORT castprogramname INTO iincludelines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  APPEND include TO ikeywords.&lt;/P&gt;&lt;P&gt;  SCAN ABAP-SOURCE iincludelines TOKENS INTO itokens WITH INCLUDES&lt;/P&gt;&lt;P&gt;  STATEMENTS INTO istatements KEYWORDS FROM ikeywords.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CLEAR iincludelines[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  maxlines = LINES( itokens ).&lt;/P&gt;&lt;P&gt;  LOOP AT itokens WHERE str = include AND type = 'I'.&lt;/P&gt;&lt;P&gt;    nextline = sy-tabix + 1.&lt;/P&gt;&lt;P&gt;    IF nextline &amp;lt;= maxlines.&lt;/P&gt;&lt;P&gt;      READ TABLE itokens INDEX nextline INTO watokens.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF watokens-str CP '*F++'.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       Are we only to find customer includes?&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF NOT customeronly IS INITIAL.&lt;/P&gt;&lt;P&gt;          TRY.&lt;/P&gt;&lt;P&gt;              IF watokens-str&lt;EM&gt;0(2) = 'LY' OR watokens-str&lt;/EM&gt;0(2) = 'LZ' OR&lt;/P&gt;&lt;P&gt;              watokens-str CS customernamerange.&lt;/P&gt;&lt;P&gt;              ELSE.&lt;/P&gt;&lt;P&gt;                CONTINUE.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt;            CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;          ENDTRY.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        wainclude-includename = watokens-str.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       Best find the program title text as well.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        PERFORM findprogramorincludetitle USING wainclude-includename&lt;/P&gt;&lt;P&gt;                                                wainclude-includetitle.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       Don't append the include if we already have it listed&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        READ TABLE ilocincludes INTO waincludeexists WITH KEY&lt;/P&gt;&lt;P&gt;        includename = wainclude-includename.&lt;/P&gt;&lt;P&gt;        IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;          APPEND wainclude TO ilocincludes.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findProgramOrIncludeTitle...   Finds the title text of a program.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findprogramorincludetitle USING value(programname)&lt;/P&gt;&lt;P&gt;                                           titletext.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SELECT SINGLE text FROM trdirt&lt;/P&gt;&lt;P&gt;                     INTO titletext&lt;/P&gt;&lt;P&gt;                     WHERE name = programname&lt;/P&gt;&lt;P&gt;                       AND sprsl = sy-langu.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findProgramOrIncludeTitle&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;retrievePrograms...    find programs and sub objects from SAP DB&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM retrieveprograms USING ilocprogram LIKE iprograms[]&lt;/P&gt;&lt;P&gt;                            ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                            rangeprogram LIKE soprogramname[]&lt;/P&gt;&lt;P&gt;                            rangeauthor LIKE soauthor[]&lt;/P&gt;&lt;P&gt;                            value(custnamerange)&lt;/P&gt;&lt;P&gt;                            value(alsomodifiedbyauthor)&lt;/P&gt;&lt;P&gt;                            value(customerprogsonly)&lt;/P&gt;&lt;P&gt;                            value(getmessages)&lt;/P&gt;&lt;P&gt;                            value(gettextelements)&lt;/P&gt;&lt;P&gt;                            value(getcustdictstructures)&lt;/P&gt;&lt;P&gt;                            value(getfunctions)&lt;/P&gt;&lt;P&gt;                            value(getincludes)&lt;/P&gt;&lt;P&gt;                            value(getscreens)&lt;/P&gt;&lt;P&gt;                            value(recursivefuncsearch)&lt;/P&gt;&lt;P&gt;                            value(recursiveincludesearch)&lt;/P&gt;&lt;P&gt;                            value(getlocalobjects)&lt;/P&gt;&lt;P&gt;                            value(package).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: warangeprogram LIKE LINE OF rangeprogram.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF rangeprogram[] IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  We are finding all programs by an author&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM findallprogramsforauthor USING ilocprogram[]&lt;/P&gt;&lt;P&gt;                                           rangeprogram[]&lt;/P&gt;&lt;P&gt;                                           rangeauthor[]&lt;/P&gt;&lt;P&gt;                                           custnamerange&lt;/P&gt;&lt;P&gt;                                           alsomodifiedbyauthor&lt;/P&gt;&lt;P&gt;                                           customerprogsonly&lt;/P&gt;&lt;P&gt;                                           getlocalobjects&lt;/P&gt;&lt;P&gt;                                           package.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    READ TABLE rangeprogram INDEX 1 INTO warangeprogram.&lt;/P&gt;&lt;P&gt;    IF warangeprogram-low CS asterix.&lt;/P&gt;&lt;P&gt;      PERFORM findprogramsbywildcard USING ilocprogram[]&lt;/P&gt;&lt;P&gt;                                           rangeprogram[]&lt;/P&gt;&lt;P&gt;                                           rangeauthor[]&lt;/P&gt;&lt;P&gt;                                           custnamerange&lt;/P&gt;&lt;P&gt;                                           customerprogsonly&lt;/P&gt;&lt;P&gt;                                           getlocalobjects&lt;/P&gt;&lt;P&gt;                                           package.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      PERFORM checkprogramdoesexist USING ilocprogram[]&lt;/P&gt;&lt;P&gt;                                          rangeprogram[].&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Find extra items&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM scanforadditionalprogstuff USING ilocprogram[]&lt;/P&gt;&lt;P&gt;                                           ilocfunctions[]&lt;/P&gt;&lt;P&gt;                                           gettextelements&lt;/P&gt;&lt;P&gt;                                           getmessages&lt;/P&gt;&lt;P&gt;                                           getscreens&lt;/P&gt;&lt;P&gt;                                           getcustdictstructures&lt;/P&gt;&lt;P&gt;                                           getfunctions&lt;/P&gt;&lt;P&gt;                                           getincludes&lt;/P&gt;&lt;P&gt;                                           customerprogsonly&lt;/P&gt;&lt;P&gt;                                           custnamerange&lt;/P&gt;&lt;P&gt;                                           recursiveincludesearch&lt;/P&gt;&lt;P&gt;                                           recursivefuncsearch.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"retrievePrograms&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; scanForAdditionalProgStuff...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM scanforadditionalprogstuff USING ilocprogram LIKE iprograms[]&lt;/P&gt;&lt;P&gt;                                      ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                                      value(gettextelements)&lt;/P&gt;&lt;P&gt;                                      value(getmessages)&lt;/P&gt;&lt;P&gt;                                      value(getscreens)&lt;/P&gt;&lt;P&gt;                                      value(getcustdictstructures)&lt;/P&gt;&lt;P&gt;                                      value(getfunctions)&lt;/P&gt;&lt;P&gt;                                      value(getincludes)&lt;/P&gt;&lt;P&gt;                                      value(customeronly)&lt;/P&gt;&lt;P&gt;                                      value(customernamerange)&lt;/P&gt;&lt;P&gt;                                      value(recursiveincludesearch)&lt;/P&gt;&lt;P&gt;                                      value(recursivefuncsearch).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: waprogram TYPE tprogram.&lt;/P&gt;&lt;P&gt;  DATA: wainclude TYPE tinclude.&lt;/P&gt;&lt;P&gt;  DATA: mytabix TYPE sytabix.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Best to find all the includes used in a program first&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT getincludes IS INITIAL.&lt;/P&gt;&lt;P&gt;    LOOP AT ilocprogram INTO waprogram.&lt;/P&gt;&lt;P&gt;      mytabix = sy-tabix.&lt;/P&gt;&lt;P&gt;      PERFORM scanforincludeprograms USING waprogram-progname&lt;/P&gt;&lt;P&gt;                                           recursiveincludesearch&lt;/P&gt;&lt;P&gt;                                           customeronly&lt;/P&gt;&lt;P&gt;                                           customernamerange&lt;/P&gt;&lt;P&gt;                                           waprogram-iincludes[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      MODIFY ilocprogram FROM waprogram INDEX mytabix.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Once we have a list of all the includes we need to loop round them an&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; select all the other objects&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT ilocprogram INTO waprogram.&lt;/P&gt;&lt;P&gt;    mytabix = sy-tabix.&lt;/P&gt;&lt;P&gt;    PERFORM findprogramdetails USING waprogram-progname&lt;/P&gt;&lt;P&gt;                                     waprogram-subc&lt;/P&gt;&lt;P&gt;                                     waprogram-programtitle&lt;/P&gt;&lt;P&gt;                                     waprogram&lt;/P&gt;&lt;P&gt;                                     gettextelements&lt;/P&gt;&lt;P&gt;                                     getmessages&lt;/P&gt;&lt;P&gt;                                     getscreens&lt;/P&gt;&lt;P&gt;                                     getcustdictstructures&lt;/P&gt;&lt;P&gt;                                     customeronly&lt;/P&gt;&lt;P&gt;                                     customernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Find any screens&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT getscreens IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM findprogramscreenflow USING waprogram.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    LOOP AT waprogram-iincludes INTO wainclude.&lt;/P&gt;&lt;P&gt;      PERFORM findprogramdetails USING wainclude-includename&lt;/P&gt;&lt;P&gt;                                       'I'&lt;/P&gt;&lt;P&gt;                                       wainclude-includetitle&lt;/P&gt;&lt;P&gt;                                       waprogram&lt;/P&gt;&lt;P&gt;                                       gettextelements&lt;/P&gt;&lt;P&gt;                                       getmessages&lt;/P&gt;&lt;P&gt;                                       getscreens&lt;/P&gt;&lt;P&gt;                                       getcustdictstructures&lt;/P&gt;&lt;P&gt;                                       customeronly&lt;/P&gt;&lt;P&gt;                                       customernamerange.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    MODIFY ilocprogram FROM waprogram INDEX mytabix.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Now we have all the program includes and details we need to find extra&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; functions&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT getfunctions IS INITIAL.&lt;/P&gt;&lt;P&gt;    LOOP AT ilocprogram INTO waprogram.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Find any functions defined in the code&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      PERFORM scanforfunctions USING waprogram-progname&lt;/P&gt;&lt;P&gt;                                     waprogram-progname&lt;/P&gt;&lt;P&gt;                                     space&lt;/P&gt;&lt;P&gt;                                     space&lt;/P&gt;&lt;P&gt;                                     customeronly&lt;/P&gt;&lt;P&gt;                                     customernamerange&lt;/P&gt;&lt;P&gt;                                     ilocfunctions[].&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;We have a list of all the functions so lets go and find details and&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*other function calls&lt;/P&gt;&lt;P&gt;  PERFORM scanforadditionalfuncstuff USING ilocfunctions[]&lt;/P&gt;&lt;P&gt;  recursiveincludesearch&lt;/P&gt;&lt;P&gt;  recursivefuncsearch&lt;/P&gt;&lt;P&gt;  getincludes&lt;/P&gt;&lt;P&gt;  getfunctions&lt;/P&gt;&lt;P&gt;  getcustdictstructures&lt;/P&gt;&lt;P&gt;  getmessages&lt;/P&gt;&lt;P&gt;  customeronly&lt;/P&gt;&lt;P&gt;  customernamerange.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"scanForAdditionalProgStuff&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findProgramDetails...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findprogramdetails USING value(programname)&lt;/P&gt;&lt;P&gt;                              value(programtype)&lt;/P&gt;&lt;P&gt;                                    programtitle&lt;/P&gt;&lt;P&gt;                                    waprogram TYPE tprogram&lt;/P&gt;&lt;P&gt;                              value(gettextelements)&lt;/P&gt;&lt;P&gt;                              value(getmessages)&lt;/P&gt;&lt;P&gt;                              value(getscreens)&lt;/P&gt;&lt;P&gt;                              value(getcustdictstructures)&lt;/P&gt;&lt;P&gt;                              value(customeronly)&lt;/P&gt;&lt;P&gt;                              value(customernamerange).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM findprogramorincludetitle USING programname&lt;/P&gt;&lt;P&gt;                                          programtitle.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT gettextelements IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Find the program texts from out of the database.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM retrieveprogramtexts USING waprogram-iselectiontexts[]&lt;/P&gt;&lt;P&gt;                                       waprogram-itextelements[]&lt;/P&gt;&lt;P&gt;                                       programname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Search for any GUI texts&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT getscreens IS INITIAL AND ( programtype = 'M' OR programtype =&lt;/P&gt;&lt;P&gt;  '1' ).&lt;/P&gt;&lt;P&gt;    PERFORM retrieveguititles USING waprogram-iguititle[]&lt;/P&gt;&lt;P&gt;                                    programname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Find individual messages&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT getmessages IS INITIAL.&lt;/P&gt;&lt;P&gt;    IF programtype = 'M' OR programtype = '1'.&lt;/P&gt;&lt;P&gt;      PERFORM findmainmessageclass USING programname&lt;/P&gt;&lt;P&gt;                                         waprogram-messageclass.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM scanformessages USING programname&lt;/P&gt;&lt;P&gt;                                  waprogram-messageclass&lt;/P&gt;&lt;P&gt;                                  waprogram-imessages[].&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT getcustdictstructures IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM scanfortables USING programname&lt;/P&gt;&lt;P&gt;                                customeronly&lt;/P&gt;&lt;P&gt;                                customernamerange&lt;/P&gt;&lt;P&gt;                                waprogram-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM scanforlikeortype USING programname&lt;/P&gt;&lt;P&gt;                                    customeronly&lt;/P&gt;&lt;P&gt;                                    customernamerange&lt;/P&gt;&lt;P&gt;                                    waprogram-idictstruct[].&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findProgramDetails&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findAllProgramsForAuthor...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findallprogramsforauthor USING ilocprogram LIKE iprograms[]&lt;/P&gt;&lt;P&gt;                                    rangeprogram LIKE soprogramname[]&lt;/P&gt;&lt;P&gt;                                    rangeauthor LIKE soauthor[]&lt;/P&gt;&lt;P&gt;                                    value(custnamerange)&lt;/P&gt;&lt;P&gt;                                    value(alsomodifiedbyauthor)&lt;/P&gt;&lt;P&gt;                                    value(customerprogsonly)&lt;/P&gt;&lt;P&gt;                                    value(getlocalobjects)&lt;/P&gt;&lt;P&gt;                                    value(package).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: altcustomernamerange TYPE string.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waprogram&amp;gt; TYPE tprogram.&lt;/P&gt;&lt;P&gt;  DATA: genflag TYPE genflag.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;build up the customer name range used for select statements&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CONCATENATE custnamerange '%' INTO altcustomernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;select by name and author&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT alsomodifiedbyauthor IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Programs modified by author&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Program to search for is an executable program&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF customerprogsonly IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Select all programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT progname subc FROM reposrc APPENDING CORRESPONDING FIELDS&lt;/P&gt;&lt;P&gt;      OF TABLE ilocprogram&lt;/P&gt;&lt;P&gt;                      WHERE progname IN rangeprogram&lt;/P&gt;&lt;P&gt;                        AND cnam IN rangeauthor&lt;/P&gt;&lt;P&gt;                        AND ( subc = '1' OR subc = 'M' ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Select only customer specific programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT progname subc FROM reposrc APPENDING CORRESPONDING FIELDS&lt;/P&gt;&lt;P&gt;      OF TABLE ilocprogram&lt;/P&gt;&lt;P&gt;                      WHERE progname  IN rangeprogram&lt;/P&gt;&lt;P&gt;                        AND ( progname LIKE altcustomernamerange&lt;/P&gt;&lt;P&gt;                              OR progname LIKE 'Z%' OR progname LIKE&lt;/P&gt;&lt;P&gt;      'Y%'&lt;/P&gt;&lt;P&gt;                             OR progname LIKE 'SAPMZ%' OR progname LIKE&lt;/P&gt;&lt;P&gt;      'SAPMY%')&lt;/P&gt;&lt;P&gt;                        AND cnam IN rangeauthor&lt;/P&gt;&lt;P&gt;                        AND ( subc = '1' OR subc = 'M' ).&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Programs created by author&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF customerprogsonly IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Select all programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT progname subc FROM reposrc APPENDING CORRESPONDING FIELDS&lt;/P&gt;&lt;P&gt;      OF TABLE ilocprogram&lt;/P&gt;&lt;P&gt;                      WHERE progname IN rangeprogram&lt;/P&gt;&lt;P&gt;                        AND ( subc = '1' OR subc = 'M' )&lt;/P&gt;&lt;P&gt;                       AND ( cnam IN rangeauthor OR unam IN rangeauthor&lt;/P&gt;&lt;P&gt;      ).&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Select only customer specific programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT progname subc FROM reposrc APPENDING CORRESPONDING FIELDS&lt;/P&gt;&lt;P&gt;      OF TABLE ilocprogram&lt;/P&gt;&lt;P&gt;                      WHERE progname IN rangeprogram&lt;/P&gt;&lt;P&gt;                        AND ( progname LIKE altcustomernamerange&lt;/P&gt;&lt;P&gt;                              OR progname LIKE 'Z%' OR progname LIKE&lt;/P&gt;&lt;P&gt;      'Y%'&lt;/P&gt;&lt;P&gt;                             OR progname LIKE 'SAPMZ%' OR progname LIKE&lt;/P&gt;&lt;P&gt;      'SAPMY%')&lt;/P&gt;&lt;P&gt;                        AND ( subc = '1' OR subc = 'M' )&lt;/P&gt;&lt;P&gt;                       AND ( cnam IN rangeauthor OR unam IN rangeauthor&lt;/P&gt;&lt;P&gt;      ).&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Delete any programs which are local objects&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF getlocalobjects IS INITIAL.&lt;/P&gt;&lt;P&gt;    LOOP AT ilocprogram ASSIGNING &amp;lt;waprogram&amp;gt;.&lt;/P&gt;&lt;P&gt;      SELECT SINGLE genflag FROM tadiv&lt;/P&gt;&lt;P&gt;                    INTO genflag&lt;/P&gt;&lt;P&gt;                    WHERE pgmid = 'R3TR'&lt;/P&gt;&lt;P&gt;                      AND object = 'PROG'&lt;/P&gt;&lt;P&gt;                      AND obj_name = &amp;lt;waprogram&amp;gt;-progname&lt;/P&gt;&lt;P&gt;                      AND devclass = '$TMP'.&lt;/P&gt;&lt;P&gt;      IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;        DELETE ilocprogram.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Delete any programs which are not in the specified package&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT package IS INITIAL.&lt;/P&gt;&lt;P&gt;    LOOP AT ilocprogram ASSIGNING &amp;lt;waprogram&amp;gt;.&lt;/P&gt;&lt;P&gt;      SELECT SINGLE genflag FROM tadiv&lt;/P&gt;&lt;P&gt;                    INTO genflag&lt;/P&gt;&lt;P&gt;                    WHERE pgmid = 'R3TR'&lt;/P&gt;&lt;P&gt;                      AND object = 'PROG'&lt;/P&gt;&lt;P&gt;                      AND obj_name = &amp;lt;waprogram&amp;gt;-progname&lt;/P&gt;&lt;P&gt;                      AND devclass &amp;lt;&amp;gt; package.&lt;/P&gt;&lt;P&gt;      IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;        DELETE ilocprogram.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findAllProgramsForAuthor&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; checkProgramDoesExist...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM checkprogramdoesexist USING ilocprogram LIKE iprograms[]&lt;/P&gt;&lt;P&gt;                                 rangeprogram LIKE soprogramname[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: waprogram TYPE tprogram.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Check to see if the program is an executable program&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SELECT SINGLE progname subc&lt;/P&gt;&lt;P&gt;                INTO (waprogram-progname, waprogram-subc)&lt;/P&gt;&lt;P&gt;                FROM reposrc&lt;/P&gt;&lt;P&gt;                WHERE progname IN rangeprogram&lt;/P&gt;&lt;P&gt;                  AND subc = '1'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   Check to see if it is an include&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    SELECT SINGLE progname subc FROM reposrc&lt;/P&gt;&lt;P&gt;                  INTO (waprogram-progname, waprogram-subc)&lt;/P&gt;&lt;P&gt;                  WHERE progname IN rangeprogram&lt;/P&gt;&lt;P&gt;                   AND subc = 'I'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     Check to see if it is a module pool&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT SINGLE progname subc FROM reposrc&lt;/P&gt;&lt;P&gt;                    INTO (waprogram-progname, waprogram-subc)&lt;/P&gt;&lt;P&gt;                    WHERE progname IN rangeprogram&lt;/P&gt;&lt;P&gt;                     AND subc = 'M'.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT waprogram-progname IS INITIAL.&lt;/P&gt;&lt;P&gt;    APPEND waprogram TO ilocprogram.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"checkProgramDoesExist&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findProgramsByWildcard.. Search in the system for programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findprogramsbywildcard USING ilocprogram LIKE iprograms[]&lt;/P&gt;&lt;P&gt;                                  value(rangeprogram) LIKE&lt;/P&gt;&lt;P&gt;soprogramname[]&lt;/P&gt;&lt;P&gt;                                  value(rangeauthor) LIKE soauthor[]&lt;/P&gt;&lt;P&gt;                                  value(custnamerange)&lt;/P&gt;&lt;P&gt;                                  value(customerprogsonly)&lt;/P&gt;&lt;P&gt;                                  value(getlocalobjects)&lt;/P&gt;&lt;P&gt;                                  value(package).&lt;/P&gt;&lt;P&gt;  .&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: altcustomernamerange TYPE string.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waprogram&amp;gt; TYPE tprogram.&lt;/P&gt;&lt;P&gt;  DATA: genflag TYPE genflag.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF customerprogsonly IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  build up the customer name range used for select statements&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF custnamerange &amp;lt;&amp;gt; '^'.&lt;/P&gt;&lt;P&gt;      CONCATENATE custnamerange '%' INTO altcustomernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      SELECT progname subc FROM reposrc APPENDING CORRESPONDING FIELDS&lt;/P&gt;&lt;P&gt;      OF TABLE ilocprogram&lt;/P&gt;&lt;P&gt;                      WHERE progname  IN rangeprogram&lt;/P&gt;&lt;P&gt;                        AND progname LIKE altcustomernamerange&lt;/P&gt;&lt;P&gt;                        AND ( subc = '1' OR subc = 'M' )&lt;/P&gt;&lt;P&gt;                       AND ( cnam IN rangeauthor OR unam IN rangeauthor&lt;/P&gt;&lt;P&gt;      )..&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      SELECT progname subc FROM reposrc APPENDING CORRESPONDING FIELDS&lt;/P&gt;&lt;P&gt;      OF TABLE ilocprogram&lt;/P&gt;&lt;P&gt;                      WHERE progname  IN rangeprogram&lt;/P&gt;&lt;P&gt;                        AND ( subc = '1' OR subc = 'M' )&lt;/P&gt;&lt;P&gt;                       AND ( cnam IN rangeauthor OR unam IN rangeauthor&lt;/P&gt;&lt;P&gt;      )..&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Only customer programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF custnamerange &amp;lt;&amp;gt; '^'.&lt;/P&gt;&lt;P&gt;      CONCATENATE custnamerange '%' INTO altcustomernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      SELECT progname subc FROM reposrc APPENDING CORRESPONDING FIELDS&lt;/P&gt;&lt;P&gt;      OF TABLE ilocprogram&lt;/P&gt;&lt;P&gt;                      WHERE progname  IN rangeprogram&lt;/P&gt;&lt;P&gt;                        AND ( progname LIKE altcustomernamerange&lt;/P&gt;&lt;P&gt;                              OR progname LIKE 'Z%' OR progname LIKE&lt;/P&gt;&lt;P&gt;      'Y%'&lt;/P&gt;&lt;P&gt;                             OR progname LIKE 'SAPMZ%' OR progname LIKE&lt;/P&gt;&lt;P&gt;      'SAPMY%')&lt;/P&gt;&lt;P&gt;                        AND ( subc = '1' OR subc = 'M' )&lt;/P&gt;&lt;P&gt;                       AND ( cnam IN rangeauthor OR unam IN rangeauthor&lt;/P&gt;&lt;P&gt;      ).                        .&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      SELECT progname subc FROM reposrc APPENDING CORRESPONDING FIELDS&lt;/P&gt;&lt;P&gt;      OF TABLE ilocprogram&lt;/P&gt;&lt;P&gt;                      WHERE progname  IN rangeprogram&lt;/P&gt;&lt;P&gt;                        AND ( progname LIKE 'Z%' OR progname LIKE 'Y%'&lt;/P&gt;&lt;P&gt;      OR progname LIKE 'SAPMZ%' OR progname LIKE 'SAPMY%')&lt;/P&gt;&lt;P&gt;                        AND ( subc = '1' OR subc = 'M' )&lt;/P&gt;&lt;P&gt;                       AND ( cnam IN rangeauthor OR unam IN rangeauthor&lt;/P&gt;&lt;P&gt;      ).                       .&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Delete any programs which are local objects&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF getlocalobjects IS INITIAL.&lt;/P&gt;&lt;P&gt;    LOOP AT ilocprogram ASSIGNING &amp;lt;waprogram&amp;gt;.&lt;/P&gt;&lt;P&gt;      SELECT SINGLE genflag FROM tadiv&lt;/P&gt;&lt;P&gt;                    INTO genflag&lt;/P&gt;&lt;P&gt;                    WHERE pgmid = 'R3TR'&lt;/P&gt;&lt;P&gt;                      AND object = 'PROG'&lt;/P&gt;&lt;P&gt;                      AND obj_name = &amp;lt;waprogram&amp;gt;-progname&lt;/P&gt;&lt;P&gt;                      AND devclass = '$TMP'.&lt;/P&gt;&lt;P&gt;      IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;        DELETE ilocprogram.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Delete any programs which are not in the specified package&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT package IS INITIAL.&lt;/P&gt;&lt;P&gt;    LOOP AT ilocprogram ASSIGNING &amp;lt;waprogram&amp;gt;.&lt;/P&gt;&lt;P&gt;      SELECT SINGLE genflag FROM tadiv&lt;/P&gt;&lt;P&gt;                    INTO genflag&lt;/P&gt;&lt;P&gt;                    WHERE pgmid = 'R3TR'&lt;/P&gt;&lt;P&gt;                      AND object = 'PROG'&lt;/P&gt;&lt;P&gt;                      AND obj_name = &amp;lt;waprogram&amp;gt;-progname&lt;/P&gt;&lt;P&gt;                      AND devclass &amp;lt;&amp;gt; package.&lt;/P&gt;&lt;P&gt;      IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;        DELETE ilocprogram.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findProgramsByWildcard&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; retrieveProgramTexts... Find the text elements and selection texts&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*for a program&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM retrieveprogramtexts USING ilocselectiontexts LIKE dumitexttab[]&lt;/P&gt;&lt;P&gt;                                iloctextelements LIKE dumitexttab[]&lt;/P&gt;&lt;P&gt;                                value(programname).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: itexttable TYPE STANDARD TABLE OF ttexttable WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: watexts TYPE ttexttable.&lt;/P&gt;&lt;P&gt;  DATA: castprogramname(50).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  MOVE programname TO castprogramname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  READ TEXTPOOL castprogramname INTO itexttable LANGUAGE sy-langu.&lt;/P&gt;&lt;P&gt;  DELETE itexttable WHERE key = 'R'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Selection texts.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT itexttable WHERE id = 'S'.&lt;/P&gt;&lt;P&gt;    MOVE itexttable-key TO watexts-key.&lt;/P&gt;&lt;P&gt;    MOVE itexttable-entry TO watexts-entry.&lt;/P&gt;&lt;P&gt;    APPEND watexts TO ilocselectiontexts.&lt;/P&gt;&lt;P&gt;    CLEAR watexts.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Text elements.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DELETE itexttable WHERE key = 'S'.&lt;/P&gt;&lt;P&gt;  LOOP AT itexttable WHERE id = 'I'.&lt;/P&gt;&lt;P&gt;    MOVE itexttable-key TO watexts-key.&lt;/P&gt;&lt;P&gt;    MOVE itexttable-entry TO watexts-entry.&lt;/P&gt;&lt;P&gt;    APPEND watexts TO iloctextelements.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"retrieveProgramTexts&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; retrieveGUITitles...  Search for any GUI texts&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM retrieveguititles USING ilocguititle LIKE dumiguititle[]&lt;/P&gt;&lt;P&gt;                             value(programname).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SELECT obj_code text FROM d347t&lt;/P&gt;&lt;P&gt;                       APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;  ilocguititle&lt;/P&gt;&lt;P&gt;                       WHERE progname = programname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"retrieveGUITitles&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  findMainMessageClass... find the message class stated at the top of&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*program.&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findmainmessageclass USING value(programname)&lt;/P&gt;&lt;P&gt;                                      messageclass.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SELECT SINGLE msgid FROM trdire INTO messageclass&lt;/P&gt;&lt;P&gt;                  WHERE report = programname.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findMainMessageClass&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;retrieveClasses...    find classes and sub objects from SAP DB&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM retrieveclasses USING ilocclasses LIKE iclasses[]&lt;/P&gt;&lt;P&gt;                           ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                           rangeclass LIKE soclassname[]&lt;/P&gt;&lt;P&gt;                           rangeauthor LIKE soauthor[]&lt;/P&gt;&lt;P&gt;                           value(custnamerange)&lt;/P&gt;&lt;P&gt;                           value(alsomodifiedbyauthor)&lt;/P&gt;&lt;P&gt;                           value(customerprogsonly)&lt;/P&gt;&lt;P&gt;                           value(getmessages)&lt;/P&gt;&lt;P&gt;                           value(gettextelements)&lt;/P&gt;&lt;P&gt;                           value(getcustdictstructures)&lt;/P&gt;&lt;P&gt;                           value(getfunctions)&lt;/P&gt;&lt;P&gt;                           value(getincludes)&lt;/P&gt;&lt;P&gt;                           value(recursivefuncsearch)&lt;/P&gt;&lt;P&gt;                           value(recursiveincludesearch)&lt;/P&gt;&lt;P&gt;                           value(recursiveclasssearch)&lt;/P&gt;&lt;P&gt;                           value(language).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: warangeclass LIKE LINE OF rangeclass.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF rangeclass[] IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  We are finding all programs by an author&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM findallclassesforauthor USING ilocclasses[]&lt;/P&gt;&lt;P&gt;                                           rangeclass[]&lt;/P&gt;&lt;P&gt;                                           rangeauthor[]&lt;/P&gt;&lt;P&gt;                                           custnamerange&lt;/P&gt;&lt;P&gt;                                           alsomodifiedbyauthor&lt;/P&gt;&lt;P&gt;                                           customerprogsonly&lt;/P&gt;&lt;P&gt;                                           language.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    READ TABLE rangeclass INDEX 1 INTO warangeclass.&lt;/P&gt;&lt;P&gt;    IF warangeclass-low CS asterix.&lt;/P&gt;&lt;P&gt;      PERFORM findclassesbywildcard USING ilocclasses[]&lt;/P&gt;&lt;P&gt;                                          rangeclass[]&lt;/P&gt;&lt;P&gt;                                          rangeauthor[]&lt;/P&gt;&lt;P&gt;                                          custnamerange&lt;/P&gt;&lt;P&gt;                                          customerprogsonly&lt;/P&gt;&lt;P&gt;                                          language.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      PERFORM checkclassdoesexist USING ilocclasses[]&lt;/P&gt;&lt;P&gt;                                        rangeclass[].&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Find extra items&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT ilocclasses[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM scanforadditionalclassstuff USING ilocclasses[]&lt;/P&gt;&lt;P&gt;                                              ilocfunctions[]&lt;/P&gt;&lt;P&gt;                                              gettextelements&lt;/P&gt;&lt;P&gt;                                              getmessages&lt;/P&gt;&lt;P&gt;                                              getcustdictstructures&lt;/P&gt;&lt;P&gt;                                              getfunctions&lt;/P&gt;&lt;P&gt;                                              getincludes&lt;/P&gt;&lt;P&gt;                                              customerprogsonly&lt;/P&gt;&lt;P&gt;                                              custnamerange&lt;/P&gt;&lt;P&gt;                                              recursiveincludesearch&lt;/P&gt;&lt;P&gt;                                              recursivefuncsearch&lt;/P&gt;&lt;P&gt;                                              recursiveclasssearch.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"retrieveClasses&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findAllClassesForAuthor...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;FORM findallclassesforauthor USING ilocclass LIKE iclasses[]&lt;/P&gt;&lt;P&gt;                                   rangeclass LIKE soclassname[]&lt;/P&gt;&lt;P&gt;                                   rangeauthor LIKE soauthor[]&lt;/P&gt;&lt;P&gt;                                   value(custnamerange)&lt;/P&gt;&lt;P&gt;                                   value(alsomodifiedbyauthor)&lt;/P&gt;&lt;P&gt;                                   value(customerclassesonly)&lt;/P&gt;&lt;P&gt;                                   value(language).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: altcustomernamerange(2).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;build up the customer name range used for select statements&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CONCATENATE custnamerange '%' INTO altcustomernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;select by name and author&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT alsomodifiedbyauthor IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Classes modified by author&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF customerclassesonly IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Select all classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;             FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;      ilocclass&lt;/P&gt;&lt;P&gt;             WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;               AND langu = language&lt;/P&gt;&lt;P&gt;              AND ( author IN rangeauthor OR changedby IN rangeauthor )&lt;/P&gt;&lt;P&gt;               AND version = '1'&lt;/P&gt;&lt;P&gt;               AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;        SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;               FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;        ilocclass&lt;/P&gt;&lt;P&gt;               WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;               AND langu = language&lt;/P&gt;&lt;P&gt;                AND ( author IN rangeauthor OR changedby IN rangeauthor&lt;/P&gt;&lt;P&gt;        )&lt;/P&gt;&lt;P&gt;                 AND version = '0'&lt;/P&gt;&lt;P&gt;                 AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Select only customer specific classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;             FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;      ilocclass&lt;/P&gt;&lt;P&gt;             WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;               AND ( clsname LIKE altcustomernamerange OR clsname LIKE&lt;/P&gt;&lt;P&gt;      'Z%' OR clsname LIKE 'Y%')&lt;/P&gt;&lt;P&gt;               AND langu = language&lt;/P&gt;&lt;P&gt;              AND ( author IN rangeauthor OR changedby IN rangeauthor )&lt;/P&gt;&lt;P&gt;               AND version = '1'&lt;/P&gt;&lt;P&gt;               AND ( state = '0' OR state = '1' ).            .&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;        SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;               FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;        ilocclass&lt;/P&gt;&lt;P&gt;               WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;                AND ( clsname LIKE altcustomernamerange OR clsname LIKE&lt;/P&gt;&lt;P&gt;        'Z%' OR clsname LIKE 'Y%')&lt;/P&gt;&lt;P&gt;                 AND langu = language&lt;/P&gt;&lt;P&gt;                AND ( author IN rangeauthor OR changedby IN rangeauthor&lt;/P&gt;&lt;P&gt;        )&lt;/P&gt;&lt;P&gt;                 AND version = '0'&lt;/P&gt;&lt;P&gt;                 AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Programs created by author&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF customerclassesonly IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Select all classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;             FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;      ilocclass&lt;/P&gt;&lt;P&gt;             WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;               AND langu = language&lt;/P&gt;&lt;P&gt;               AND author IN rangeauthor&lt;/P&gt;&lt;P&gt;               AND version = '1'&lt;/P&gt;&lt;P&gt;               AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;        SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;               FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;        ilocclass&lt;/P&gt;&lt;P&gt;               WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;                 AND langu = language&lt;/P&gt;&lt;P&gt;                 AND author IN rangeauthor&lt;/P&gt;&lt;P&gt;                 AND version = '0'&lt;/P&gt;&lt;P&gt;                 AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Select only customer specific classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;             FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;      ilocclass&lt;/P&gt;&lt;P&gt;             WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;               AND ( clsname LIKE altcustomernamerange OR clsname LIKE&lt;/P&gt;&lt;P&gt;      'Z%' OR clsname LIKE 'Y%')&lt;/P&gt;&lt;P&gt;               AND langu = language&lt;/P&gt;&lt;P&gt;               AND author IN rangeauthor&lt;/P&gt;&lt;P&gt;               AND version = '1'&lt;/P&gt;&lt;P&gt;               AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;        SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;               FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;        ilocclass&lt;/P&gt;&lt;P&gt;               WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;                AND ( clsname LIKE altcustomernamerange OR clsname LIKE&lt;/P&gt;&lt;P&gt;        'Z%' OR clsname LIKE 'Y%')&lt;/P&gt;&lt;P&gt;                 AND langu = language&lt;/P&gt;&lt;P&gt;                 AND author IN rangeauthor&lt;/P&gt;&lt;P&gt;                 AND version = '0'&lt;/P&gt;&lt;P&gt;                 AND ( state = '0' OR state = '1' ).               .&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findAllClassesForAuthor&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findClassesByWildcard...  Find classes using a wildcard search&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findclassesbywildcard USING ilocclass LIKE iclasses[]&lt;/P&gt;&lt;P&gt;                                 rangeclass LIKE soclassname[]&lt;/P&gt;&lt;P&gt;                                 value(rangeauthor) LIKE soauthor[]&lt;/P&gt;&lt;P&gt;                                 value(custnamerange)&lt;/P&gt;&lt;P&gt;                                 value(customerclassesonly)&lt;/P&gt;&lt;P&gt;                                 value(language).&lt;/P&gt;&lt;P&gt;  .&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: altcustomernamerange(2).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF customerclassesonly IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Searching for customer and SAP classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF custnamerange &amp;lt;&amp;gt; '^'.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    build up the customer name range used for select statements&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      CONCATENATE custnamerange '%' INTO altcustomernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;             FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;      ilocclass&lt;/P&gt;&lt;P&gt;             WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;               AND clsname LIKE custnamerange&lt;/P&gt;&lt;P&gt;               AND langu = language&lt;/P&gt;&lt;P&gt;              AND ( author IN rangeauthor OR changedby IN rangeauthor )&lt;/P&gt;&lt;P&gt;               AND version = '1'&lt;/P&gt;&lt;P&gt;               AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;      IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;        SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;               FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;        ilocclass&lt;/P&gt;&lt;P&gt;               WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;                 AND clsname LIKE custnamerange&lt;/P&gt;&lt;P&gt;                 AND langu = language&lt;/P&gt;&lt;P&gt;                AND ( author IN rangeauthor OR changedby IN rangeauthor&lt;/P&gt;&lt;P&gt;        )&lt;/P&gt;&lt;P&gt;                 AND version = '0'&lt;/P&gt;&lt;P&gt;                 AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Searching using normal name ranges&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;             FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;      ilocclass&lt;/P&gt;&lt;P&gt;             WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;               AND langu = language&lt;/P&gt;&lt;P&gt;              AND ( author IN rangeauthor OR changedby IN rangeauthor )&lt;/P&gt;&lt;P&gt;               AND version = '1'&lt;/P&gt;&lt;P&gt;               AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;      IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;        SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;               FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;        ilocclass&lt;/P&gt;&lt;P&gt;               WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;                 AND langu = language&lt;/P&gt;&lt;P&gt;                AND ( author IN rangeauthor OR changedby IN rangeauthor&lt;/P&gt;&lt;P&gt;        )&lt;/P&gt;&lt;P&gt;                 AND version = '0'&lt;/P&gt;&lt;P&gt;                 AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  searching for only customer classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF custnamerange &amp;lt;&amp;gt; '^'.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    build up the customer name range used for select statements&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      CONCATENATE custnamerange '%' INTO altcustomernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;             FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;      ilocclass&lt;/P&gt;&lt;P&gt;             WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;               AND clsname LIKE custnamerange&lt;/P&gt;&lt;P&gt;               AND langu = language&lt;/P&gt;&lt;P&gt;               AND ( clsname LIKE 'ZC%' OR clsname LIKE 'YC%' )&lt;/P&gt;&lt;P&gt;              AND ( author IN rangeauthor OR changedby IN rangeauthor )&lt;/P&gt;&lt;P&gt;               AND version = '1'&lt;/P&gt;&lt;P&gt;               AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;      IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;        SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;               FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;        ilocclass&lt;/P&gt;&lt;P&gt;               WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;                 AND langu = language&lt;/P&gt;&lt;P&gt;                 AND ( clsname LIKE 'ZC%' OR clsname LIKE 'YC%' )&lt;/P&gt;&lt;P&gt;                AND ( author IN rangeauthor OR changedby IN rangeauthor&lt;/P&gt;&lt;P&gt;        )&lt;/P&gt;&lt;P&gt;                 AND version = '0'&lt;/P&gt;&lt;P&gt;                 AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Searching using normal name ranges&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;             FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;      ilocclass&lt;/P&gt;&lt;P&gt;             WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;               AND ( clsname LIKE 'ZC%' OR clsname LIKE 'YC%' )&lt;/P&gt;&lt;P&gt;              AND ( author IN rangeauthor OR changedby IN rangeauthor )&lt;/P&gt;&lt;P&gt;               AND version = '1'&lt;/P&gt;&lt;P&gt;               AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;      IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;        SELECT clsname descript msg_id&lt;/P&gt;&lt;P&gt;               FROM vseoclass APPENDING CORRESPONDING FIELDS OF TABLE&lt;/P&gt;&lt;P&gt;        ilocclass&lt;/P&gt;&lt;P&gt;               WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;                 AND ( clsname LIKE 'ZC%' OR clsname LIKE 'YC%' )&lt;/P&gt;&lt;P&gt;                AND ( author IN rangeauthor OR changedby IN rangeauthor&lt;/P&gt;&lt;P&gt;        )&lt;/P&gt;&lt;P&gt;                 AND version = '0'&lt;/P&gt;&lt;P&gt;                 AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; checkClassDoesExist...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM checkclassdoesexist USING ilocclass LIKE iclasses[]&lt;/P&gt;&lt;P&gt;                               rangeclass LIKE soclassname[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: waclass TYPE tclass.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SELECT SINGLE clsname descript msg_id&lt;/P&gt;&lt;P&gt;         FROM vseoclass INTO CORRESPONDING FIELDS OF waclass&lt;/P&gt;&lt;P&gt;         WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;           AND version = '1'&lt;/P&gt;&lt;P&gt;           AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    SELECT SINGLE clsname descript msg_id&lt;/P&gt;&lt;P&gt;         FROM vseoclass INTO CORRESPONDING FIELDS OF waclass&lt;/P&gt;&lt;P&gt;           WHERE clsname IN rangeclass&lt;/P&gt;&lt;P&gt;             AND version = '0'&lt;/P&gt;&lt;P&gt;             AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT waclass-clsname IS INITIAL.&lt;/P&gt;&lt;P&gt;    APPEND waclass TO ilocclass.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"checkClassDoesExist&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; scanForAdditionalClassStuff...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM scanforadditionalclassstuff USING ilocclasses LIKE iclasses[]&lt;/P&gt;&lt;P&gt;                                       ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                                       value(gettextelements)&lt;/P&gt;&lt;P&gt;                                       value(getmessages)&lt;/P&gt;&lt;P&gt;                                       value(getcustdictstructures)&lt;/P&gt;&lt;P&gt;                                       value(getfunctions)&lt;/P&gt;&lt;P&gt;                                       value(getincludes)&lt;/P&gt;&lt;P&gt;                                       value(customeronly)&lt;/P&gt;&lt;P&gt;                                       value(customernamerange)&lt;/P&gt;&lt;P&gt;                                       value(recursiveincludesearch)&lt;/P&gt;&lt;P&gt;                                       value(recursivefuncsearch)&lt;/P&gt;&lt;P&gt;                                       value(recursiveclasssearch).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: waclass TYPE tclass.&lt;/P&gt;&lt;P&gt;  DATA: wamethod TYPE tmethod.&lt;/P&gt;&lt;P&gt;  DATA: mytabix TYPE sytabix.&lt;/P&gt;&lt;P&gt;  DATA: scanningforclasses TYPE i VALUE false.&lt;/P&gt;&lt;P&gt;  DATA: classnewlines TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  DATA: classcurrentlines TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocclasses INTO waclass WHERE scanned IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Once we have a list of all the classes we need to loop round them an&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   select all the other objects&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    mytabix = sy-tabix.&lt;/P&gt;&lt;P&gt;    PERFORM findclassdetails USING waclass-clsname&lt;/P&gt;&lt;P&gt;                                   waclass&lt;/P&gt;&lt;P&gt;                                   ilocfunctions[]&lt;/P&gt;&lt;P&gt;                                   gettextelements&lt;/P&gt;&lt;P&gt;                                   getmessages&lt;/P&gt;&lt;P&gt;                                   getfunctions&lt;/P&gt;&lt;P&gt;                                   getcustdictstructures&lt;/P&gt;&lt;P&gt;                                   customeronly&lt;/P&gt;&lt;P&gt;                                   customernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Set the scanned class so we do not check them again when running&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     recursively.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    waclass-scanned = 'X'.&lt;/P&gt;&lt;P&gt;    MODIFY ilocclasses FROM waclass INDEX mytabix.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Now we have all the classes and details we need to find extra classes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT recursiveclasssearch IS INITIAL.&lt;/P&gt;&lt;P&gt;    classcurrentlines = LINES( ilocclasses ).&lt;/P&gt;&lt;P&gt;    LOOP AT ilocclasses INTO waclass.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Don't try and find any other details for an exception class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IF ( waclass-clsname NS 'ZCX_' OR waclass-clsname NS 'CX_'  ).&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Find any classes defined in the main class definition&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        PERFORM scanforclasses USING waclass-privateclasskey&lt;/P&gt;&lt;P&gt;                                     waclass-clsname&lt;/P&gt;&lt;P&gt;                                     customeronly&lt;/P&gt;&lt;P&gt;                                     customernamerange&lt;/P&gt;&lt;P&gt;                                     ilocclasses[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        PERFORM scanforclasses USING waclass-publicclasskey&lt;/P&gt;&lt;P&gt;                                     waclass-clsname&lt;/P&gt;&lt;P&gt;                                     customeronly&lt;/P&gt;&lt;P&gt;                                     customernamerange&lt;/P&gt;&lt;P&gt;                                     ilocclasses[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        PERFORM scanforclasses USING waclass-protectedclasskey&lt;/P&gt;&lt;P&gt;                                     waclass-clsname&lt;/P&gt;&lt;P&gt;                                     customeronly&lt;/P&gt;&lt;P&gt;                                     customernamerange&lt;/P&gt;&lt;P&gt;                                     ilocclasses[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        LOOP AT waclass-imethods INTO wamethod.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Find any classes defined in any of the methods&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          PERFORM scanforclasses USING wamethod-methodkey&lt;/P&gt;&lt;P&gt;                                       waclass-clsname&lt;/P&gt;&lt;P&gt;                                       customeronly&lt;/P&gt;&lt;P&gt;                                       customernamerange&lt;/P&gt;&lt;P&gt;                                       ilocclasses[].&lt;/P&gt;&lt;P&gt;        ENDLOOP.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  We have a list of all the classes so lets go and find their details&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    classnewlines = LINES( ilocclasses ).&lt;/P&gt;&lt;P&gt;    IF classnewlines &amp;gt; classcurrentlines.&lt;/P&gt;&lt;P&gt;      PERFORM scanforadditionalclassstuff USING ilocclasses[]&lt;/P&gt;&lt;P&gt;                                                ilocfunctions[]&lt;/P&gt;&lt;P&gt;                                                gettextelements&lt;/P&gt;&lt;P&gt;                                                getmessages&lt;/P&gt;&lt;P&gt;                                                getcustdictstructures&lt;/P&gt;&lt;P&gt;                                                getfunctions&lt;/P&gt;&lt;P&gt;                                                getincludes&lt;/P&gt;&lt;P&gt;                                                customeronly&lt;/P&gt;&lt;P&gt;                                                customernamerange&lt;/P&gt;&lt;P&gt;                                               recursiveincludesearch&lt;/P&gt;&lt;P&gt;                                                recursivefuncsearch&lt;/P&gt;&lt;P&gt;                                                recursiveclasssearch.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"scanForAdditionalClassStuff&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findClassDetails...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findclassdetails USING value(classname)&lt;/P&gt;&lt;P&gt;                                  waclass TYPE tclass&lt;/P&gt;&lt;P&gt;                              ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                              value(gettextelements)&lt;/P&gt;&lt;P&gt;                              value(getmessages)&lt;/P&gt;&lt;P&gt;                              value(getfunctions)&lt;/P&gt;&lt;P&gt;                              value(getcustdictstructures)&lt;/P&gt;&lt;P&gt;                              value(customeronly)&lt;/P&gt;&lt;P&gt;                              value(customernamerange).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: iemptyselectiontexts TYPE STANDARD TABLE OF ttexttable.&lt;/P&gt;&lt;P&gt;  DATA: mytabix TYPE sytabix.&lt;/P&gt;&lt;P&gt;  DATA: wamethod TYPE tmethod.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Build up the keys we will use for finding data&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM buildclasskeys USING waclass.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF waclass-descript IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM findclassdescription USING classname&lt;/P&gt;&lt;P&gt;                                       waclass-descript.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Find the class attributes.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  SELECT SINGLE exposure msg_id state clsfinal r3release&lt;/P&gt;&lt;P&gt;                FROM vseoclass&lt;/P&gt;&lt;P&gt;                INTO (waclass-exposure, waclass-msg_id, waclass-state,&lt;/P&gt;&lt;P&gt;  waclass-clsfinal, waclass-r3release)&lt;/P&gt;&lt;P&gt;                       WHERE clsname = waclass-clsname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Don't try and find any other details for an exception class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF ( waclass-clsname CS 'ZCX_' OR waclass-clsname CS 'CX_'  ).&lt;/P&gt;&lt;P&gt;    waclass-scanned = 'X'.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    IF NOT gettextelements IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Find the class texts from out of the database.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      PERFORM retrieveprogramtexts USING iemptyselectiontexts[]&lt;/P&gt;&lt;P&gt;                                         waclass-itextelements[]&lt;/P&gt;&lt;P&gt;                                         waclass-textelementkey.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Find any declared dictionary structures&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT getcustdictstructures IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM scanfortables USING waclass-privateclasskey&lt;/P&gt;&lt;P&gt;                                  customeronly&lt;/P&gt;&lt;P&gt;                                  customernamerange&lt;/P&gt;&lt;P&gt;                                  waclass-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      PERFORM scanfortables USING waclass-publicclasskey&lt;/P&gt;&lt;P&gt;                                  customeronly&lt;/P&gt;&lt;P&gt;                                  customernamerange&lt;/P&gt;&lt;P&gt;                                  waclass-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      PERFORM scanfortables USING waclass-protectedclasskey&lt;/P&gt;&lt;P&gt;                                  customeronly&lt;/P&gt;&lt;P&gt;                                  customernamerange&lt;/P&gt;&lt;P&gt;                                  waclass-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      PERFORM scanfortables USING waclass-typesclasskey&lt;/P&gt;&lt;P&gt;                                  customeronly&lt;/P&gt;&lt;P&gt;                                  customernamerange&lt;/P&gt;&lt;P&gt;                                  waclass-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      PERFORM scanforlikeortype USING waclass-privateclasskey&lt;/P&gt;&lt;P&gt;                                      customeronly&lt;/P&gt;&lt;P&gt;                                      customernamerange&lt;/P&gt;&lt;P&gt;                                      waclass-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      PERFORM scanforlikeortype USING waclass-publicclasskey&lt;/P&gt;&lt;P&gt;                                      customeronly&lt;/P&gt;&lt;P&gt;                                      customernamerange&lt;/P&gt;&lt;P&gt;                                      waclass-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      PERFORM scanforlikeortype USING waclass-protectedclasskey&lt;/P&gt;&lt;P&gt;                                      customeronly&lt;/P&gt;&lt;P&gt;                                      customernamerange&lt;/P&gt;&lt;P&gt;                                      waclass-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      PERFORM scanforlikeortype USING waclass-typesclasskey&lt;/P&gt;&lt;P&gt;                                      customeronly&lt;/P&gt;&lt;P&gt;                                      customernamerange&lt;/P&gt;&lt;P&gt;                                      waclass-idictstruct[].&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Methods&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Find all the methods for this class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM findclassmethods USING classname&lt;/P&gt;&lt;P&gt;                                   waclass-imethods[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    LOOP AT waclass-imethods[] INTO wamethod.&lt;/P&gt;&lt;P&gt;      mytabix = sy-tabix.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Find individual messages&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IF NOT getmessages IS INITIAL.&lt;/P&gt;&lt;P&gt;        PERFORM scanformessages USING wamethod-methodkey&lt;/P&gt;&lt;P&gt;                                      waclass-msg_id&lt;/P&gt;&lt;P&gt;                                      waclass-imessages[].&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF NOT getcustdictstructures IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Find any declared dictionary structures&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        PERFORM scanfortables USING wamethod-methodkey&lt;/P&gt;&lt;P&gt;                                    customeronly&lt;/P&gt;&lt;P&gt;                                    customernamerange&lt;/P&gt;&lt;P&gt;                                    waclass-idictstruct[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        PERFORM scanforlikeortype USING wamethod-methodkey&lt;/P&gt;&lt;P&gt;                                        customeronly&lt;/P&gt;&lt;P&gt;                                        customernamerange&lt;/P&gt;&lt;P&gt;                                        waclass-idictstruct[].&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF NOT getfunctions IS INITIAL.&lt;/P&gt;&lt;P&gt;        PERFORM scanforfunctions USING wamethod-methodkey&lt;/P&gt;&lt;P&gt;                                       waclass-clsname&lt;/P&gt;&lt;P&gt;                                       space&lt;/P&gt;&lt;P&gt;                                       space&lt;/P&gt;&lt;P&gt;                                       customeronly&lt;/P&gt;&lt;P&gt;                                       customernamerange&lt;/P&gt;&lt;P&gt;                                       ilocfunctions[].&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      MODIFY waclass-imethods FROM wamethod INDEX mytabix.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findClassDetails&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; buildClassKeys...   Finds the title text of a class.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM buildclasskeys USING waclass TYPE tclass.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: classnamelength TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: loops TYPE i.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  classnamelength = STRLEN( waclass-clsname ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  cl_oo_classname_service=&amp;gt;get_pubsec_name( EXPORTING clsname =&lt;/P&gt;&lt;P&gt;  waclass-clsname&lt;/P&gt;&lt;P&gt;                                            RECEIVING result =&lt;/P&gt;&lt;P&gt;  waclass-publicclasskey ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  cl_oo_classname_service=&amp;gt;get_prisec_name( EXPORTING clsname =&lt;/P&gt;&lt;P&gt;  waclass-clsname&lt;/P&gt;&lt;P&gt;                                            RECEIVING result =&lt;/P&gt;&lt;P&gt;  waclass-privateclasskey ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  cl_oo_classname_service=&amp;gt;get_prosec_name( EXPORTING clsname =&lt;/P&gt;&lt;P&gt;  waclass-clsname&lt;/P&gt;&lt;P&gt;                                            RECEIVING result =&lt;/P&gt;&lt;P&gt;  waclass-protectedclasskey ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Text element key - length of text element key has to be 32 characters.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  loops = 30 - classnamelength.&lt;/P&gt;&lt;P&gt;  waclass-textelementkey = waclass-clsname.&lt;/P&gt;&lt;P&gt;  DO loops TIMES.&lt;/P&gt;&lt;P&gt;    CONCATENATE waclass-textelementkey '=' INTO waclass-textelementkey.&lt;/P&gt;&lt;P&gt;  ENDDO.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Save this for later.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CONCATENATE waclass-textelementkey 'CP' INTO waclass-textelementkey.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Types Class key - length of class name has to be 32 characters.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  loops = 30 - classnamelength.&lt;/P&gt;&lt;P&gt;  waclass-typesclasskey = waclass-clsname.&lt;/P&gt;&lt;P&gt;  DO loops TIMES.&lt;/P&gt;&lt;P&gt;    CONCATENATE waclass-typesclasskey '=' INTO waclass-typesclasskey.&lt;/P&gt;&lt;P&gt;  ENDDO.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Save this for later&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CONCATENATE waclass-typesclasskey 'CT' INTO waclass-typesclasskey.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"buildClassKeys&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findClassDescription...   Finds the title text of a class.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findclassdescription USING value(classname)&lt;/P&gt;&lt;P&gt;                                      titletext.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SELECT SINGLE descript FROM vseoclass&lt;/P&gt;&lt;P&gt;                     INTO titletext&lt;/P&gt;&lt;P&gt;                     WHERE clsname = classname&lt;/P&gt;&lt;P&gt;                       AND langu = sy-langu.&lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    SELECT SINGLE descript FROM vseoclass&lt;/P&gt;&lt;P&gt;                       INTO titletext&lt;/P&gt;&lt;P&gt;                       WHERE clsname = classname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findClassDescription&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findClassMethods...   Finds the methods of a class.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findclassmethods USING value(classname)&lt;/P&gt;&lt;P&gt;                            ilocmethods LIKE dumimethods[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: imethods TYPE STANDARD TABLE OF tmethod WITH HEADER LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SELECT cmpname descript exposure&lt;/P&gt;&lt;P&gt;         FROM vseomethod&lt;/P&gt;&lt;P&gt;         INTO CORRESPONDING FIELDS OF TABLE imethods&lt;/P&gt;&lt;P&gt;           WHERE clsname = classname&lt;/P&gt;&lt;P&gt;             AND version = '1'&lt;/P&gt;&lt;P&gt;             AND langu = sy-langu&lt;/P&gt;&lt;P&gt;             AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    SELECT cmpname descript exposure&lt;/P&gt;&lt;P&gt;           FROM vseomethod&lt;/P&gt;&lt;P&gt;           INTO CORRESPONDING FIELDS OF TABLE imethods&lt;/P&gt;&lt;P&gt;           WHERE clsname = classname&lt;/P&gt;&lt;P&gt;             AND version = '0'&lt;/P&gt;&lt;P&gt;             AND langu = sy-langu&lt;/P&gt;&lt;P&gt;             AND ( state = '0' OR state = '1' ).&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Find the method key so that we can acces the source code later&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT imethods.&lt;/P&gt;&lt;P&gt;    PERFORM findmethodkey USING classname&lt;/P&gt;&lt;P&gt;                                imethods-cmpname&lt;/P&gt;&lt;P&gt;                                imethods-methodkey.&lt;/P&gt;&lt;P&gt;    MODIFY imethods.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  ilocmethods[] = imethods[].&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findClassMethods&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;findMethodKey... find the unique key which identifes this method&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findmethodkey USING value(classname)&lt;/P&gt;&lt;P&gt;                         value(methodname)&lt;/P&gt;&lt;P&gt;                               methodkey.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: methodid TYPE seocpdkey.&lt;/P&gt;&lt;P&gt;  DATA: locmethodkey TYPE program.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  methodid-clsname = classname.&lt;/P&gt;&lt;P&gt;  methodid-cpdname = methodname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  cl_oo_classname_service=&amp;gt;get_method_include( EXPORTING mtdkey =&lt;/P&gt;&lt;P&gt;  methodid&lt;/P&gt;&lt;P&gt;                                               RECEIVING result =&lt;/P&gt;&lt;P&gt;  locmethodkey&lt;/P&gt;&lt;P&gt;                                               EXCEPTIONS&lt;/P&gt;&lt;P&gt;  class_not_existing = 1&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  method_not_existing = 2 ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  methodkey = locmethodkey.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findMethodKey&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;scanForMessages... Search each program for messages&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM scanformessages USING value(programname)&lt;/P&gt;&lt;P&gt;                           value(mainmessageclass)&lt;/P&gt;&lt;P&gt;                                 ilocmessages LIKE imessages[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: iincludelines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: itokens TYPE STANDARD TABLE OF stokes WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: istatements TYPE STANDARD TABLE OF sstmnt WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: ikeywords TYPE STANDARD TABLE OF text20 WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: wamessage TYPE tmessage.&lt;/P&gt;&lt;P&gt;  DATA: wamessagecomparison TYPE tmessage.&lt;/P&gt;&lt;P&gt;  DATA: watokens TYPE stokes.&lt;/P&gt;&lt;P&gt;  DATA: nextline TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: stringlength TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  DATA: workingonmessage TYPE i VALUE false.&lt;/P&gt;&lt;P&gt;  DATA: castprogramname TYPE program.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read the program code from the textpool.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  castprogramname = programname.&lt;/P&gt;&lt;P&gt;  READ REPORT castprogramname INTO iincludelines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  APPEND message TO ikeywords.&lt;/P&gt;&lt;P&gt;  SCAN ABAP-SOURCE iincludelines TOKENS INTO itokens WITH INCLUDES&lt;/P&gt;&lt;P&gt;  STATEMENTS INTO istatements KEYWORDS FROM ikeywords.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CLEAR iincludelines[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT itokens.&lt;/P&gt;&lt;P&gt;    IF itokens-str = message.&lt;/P&gt;&lt;P&gt;      workingonmessage = true.&lt;/P&gt;&lt;P&gt;      CONTINUE.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF workingonmessage = true.&lt;/P&gt;&lt;P&gt;      stringlength = STRLEN( itokens-str ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Message declaration 1&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IF stringlength = 4 AND itokens-str+0(1) CA sy-abcde.&lt;/P&gt;&lt;P&gt;        wamessage-msgnr = itokens-str+1(3).&lt;/P&gt;&lt;P&gt;        wamessage-arbgb = mainmessageclass.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        IF itokens-str CS '''' OR itokens-str CS '`'.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Message declaration 2&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          TRANSLATE itokens-str USING ''' '.&lt;/P&gt;&lt;P&gt;          TRANSLATE itokens-str USING '` '.&lt;/P&gt;&lt;P&gt;          CONDENSE itokens-str.&lt;/P&gt;&lt;P&gt;          SHIFT itokens-str LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;          wamessage-text = itokens-str.&lt;/P&gt;&lt;P&gt;          wamessage-arbgb = 'Hard coded'.&lt;/P&gt;&lt;P&gt;        ELSE.&lt;/P&gt;&lt;P&gt;          IF itokens-str = 'ID'.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;          Message declaration 3&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;            nextline = sy-tabix + 1.&lt;/P&gt;&lt;P&gt;            READ TABLE itokens INDEX nextline INTO watokens.&lt;/P&gt;&lt;P&gt;            TRANSLATE watokens-str USING ''' '.&lt;/P&gt;&lt;P&gt;            CONDENSE itokens-str.&lt;/P&gt;&lt;P&gt;            SHIFT watokens-str LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;            IF NOT watokens-str = 'SY-MSGID'.&lt;/P&gt;&lt;P&gt;              wamessage-arbgb = watokens-str.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              nextline = nextline + 4.&lt;/P&gt;&lt;P&gt;              READ TABLE itokens INDEX nextline INTO watokens.&lt;/P&gt;&lt;P&gt;              TRANSLATE watokens-str USING ''' '.&lt;/P&gt;&lt;P&gt;              CONDENSE watokens-str.&lt;/P&gt;&lt;P&gt;              SHIFT watokens-str LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;              wamessage-msgnr = watokens-str.&lt;/P&gt;&lt;P&gt;            ELSE.&lt;/P&gt;&lt;P&gt;              workingonmessage = false.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          ELSE.&lt;/P&gt;&lt;P&gt;            IF stringlength &amp;gt;= 5 AND itokens-str+4(1) = '('.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;             Message declaration 4&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              wamessage-msgnr = itokens-str+1(3).&lt;/P&gt;&lt;P&gt;              SHIFT itokens-str LEFT UP TO '('.&lt;/P&gt;&lt;P&gt;              REPLACE '(' INTO itokens-str WITH space.&lt;/P&gt;&lt;P&gt;              REPLACE ')' INTO itokens-str WITH space.&lt;/P&gt;&lt;P&gt;              CONDENSE itokens-str.&lt;/P&gt;&lt;P&gt;              wamessage-arbgb = itokens-str.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     find the message text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IF NOT wamessage-arbgb IS INITIAL AND NOT wamessage-msgnr IS&lt;/P&gt;&lt;P&gt;      INITIAL AND wamessage-text IS INITIAL.&lt;/P&gt;&lt;P&gt;        SELECT SINGLE text FROM t100 INTO wamessage-text&lt;/P&gt;&lt;P&gt;                           WHERE sprsl = sy-langu&lt;/P&gt;&lt;P&gt;                             AND arbgb = wamessage-arbgb&lt;/P&gt;&lt;P&gt;                             AND msgnr = wamessage-msgnr.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     Append the message&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IF NOT wamessage IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       Don't append the message if we already have it listed&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        READ TABLE ilocmessages WITH KEY arbgb = wamessage-arbgb&lt;/P&gt;&lt;P&gt;                                         msgnr = wamessage-msgnr&lt;/P&gt;&lt;P&gt;                                         INTO wamessagecomparison.&lt;/P&gt;&lt;P&gt;        IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;          APPEND wamessage TO ilocmessages.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;        CLEAR wamessage.&lt;/P&gt;&lt;P&gt;        workingonmessage = false.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"scanForMessages&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;scanForTables... Search each program for dictionary tables&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM scanfortables USING value(programname)&lt;/P&gt;&lt;P&gt;                         value(customeronly)&lt;/P&gt;&lt;P&gt;                         value(customernamerange)&lt;/P&gt;&lt;P&gt;                               ilocdictionary LIKE idictionary[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: iincludelines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: itokens TYPE STANDARD TABLE OF stokes WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: istatements TYPE STANDARD TABLE OF sstmnt WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: ikeywords TYPE STANDARD TABLE OF text20 WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: wadictionary TYPE tdicttable.&lt;/P&gt;&lt;P&gt;  DATA: wadictionarycomparison TYPE tdicttable.&lt;/P&gt;&lt;P&gt;  DATA: castprogramname TYPE program.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read the program code from the textpool.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  castprogramname = programname.&lt;/P&gt;&lt;P&gt;  READ REPORT castprogramname INTO iincludelines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  APPEND tables TO ikeywords.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SCAN ABAP-SOURCE iincludelines TOKENS INTO itokens WITH INCLUDES&lt;/P&gt;&lt;P&gt;  STATEMENTS INTO istatements KEYWORDS FROM ikeywords.&lt;/P&gt;&lt;P&gt;  CLEAR iincludelines[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SORT itokens ASCENDING BY str.&lt;/P&gt;&lt;P&gt;  DELETE itokens WHERE str = tables.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT itokens.&lt;/P&gt;&lt;P&gt;    TRY.&lt;/P&gt;&lt;P&gt;        IF itokens-str&lt;EM&gt;0(1) = 'Y' OR itokens-str&lt;/EM&gt;0(1) = 'Z' OR itokens-str&lt;/P&gt;&lt;P&gt;        CS customernamerange.&lt;/P&gt;&lt;P&gt;          wadictionary-tablename = itokens-str.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Don't append the object if we already have it listed&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          READ TABLE ilocdictionary INTO wadictionarycomparison WITH KEY&lt;/P&gt;&lt;P&gt;          tablename = wadictionary-tablename.&lt;/P&gt;&lt;P&gt;          IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;            PERFORM findtabledescription USING wadictionary-tablename&lt;/P&gt;&lt;P&gt;                                               wadictionary-tabletitle.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;            PERFORM findtabledefinition USING wadictionary-tablename&lt;/P&gt;&lt;P&gt;                                              wadictionary-istructure[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;            APPEND wadictionary TO ilocdictionary.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;    ENDTRY.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"scanForTables&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findProgramScreenFlow...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findprogramscreenflow USING waprogram TYPE tprogram.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: iflow TYPE STANDARD TABLE OF tscreenflow WITH HEADER LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'DYNPRO_PROCESSINGLOGIC'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      rep_name  = waprogram-progname&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      scr_logic = iflow.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SORT iflow ASCENDING BY screen.&lt;/P&gt;&lt;P&gt;  DELETE ADJACENT DUPLICATES FROM iflow COMPARING screen.&lt;/P&gt;&lt;P&gt;  IF waprogram-subc &amp;lt;&amp;gt; 'M'.&lt;/P&gt;&lt;P&gt;    DELETE iflow WHERE screen &amp;gt;= '1000' AND screen &amp;lt;= '1099'.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT iflow.&lt;/P&gt;&lt;P&gt;    APPEND iflow TO waprogram-iscreenflow.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findProgramScreenFlow&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; findFunctionScreenFlow...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM findfunctionscreenflow USING wafunction TYPE tfunction.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: iflow TYPE STANDARD TABLE OF tscreenflow WITH HEADER LINE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'DYNPRO_PROCESSINGLOGIC'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      rep_name  = wafunction-progname&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      scr_logic = iflow.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SORT iflow ASCENDING BY screen.&lt;/P&gt;&lt;P&gt;  DELETE ADJACENT DUPLICATES FROM iflow COMPARING screen.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT iflow.&lt;/P&gt;&lt;P&gt;    APPEND iflow TO wafunction-iscreenflow.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"findFunctionScreenFlow&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;scanForLikeOrType... Look for any dictionary objects referenced by a&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*like or type statement&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM scanforlikeortype USING value(programname)&lt;/P&gt;&lt;P&gt;                             value(customeronly)&lt;/P&gt;&lt;P&gt;                             value(customernamerange)&lt;/P&gt;&lt;P&gt;                             ilocdictionary LIKE idictionary[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA ilines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: head TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: tail TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: junk TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: linetype TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: linelength TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  DATA: endofline TYPE i VALUE true.&lt;/P&gt;&lt;P&gt;  DATA: wadictionary TYPE tdicttable.&lt;/P&gt;&lt;P&gt;  DATA: wadictionarycomparison TYPE tdicttable.&lt;/P&gt;&lt;P&gt;  DATA: waline TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: castprogramname TYPE program.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Read the program code from the textpool.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  castprogramname = programname.&lt;/P&gt;&lt;P&gt;  READ REPORT castprogramname INTO ilines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilines INTO waline.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Find custom tables.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    linelength = STRLEN( waline ).&lt;/P&gt;&lt;P&gt;    IF linelength &amp;gt; 0.&lt;/P&gt;&lt;P&gt;      IF waline(1) = asterix.&lt;/P&gt;&lt;P&gt;        CONTINUE.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      TRANSLATE waline TO UPPER CASE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Determine the lineType.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IF endofline = true.&lt;/P&gt;&lt;P&gt;        SHIFT waline UP TO like.&lt;/P&gt;&lt;P&gt;        IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;          linetype = like.&lt;/P&gt;&lt;P&gt;        ELSE.&lt;/P&gt;&lt;P&gt;          SHIFT waline UP TO type.&lt;/P&gt;&lt;P&gt;          IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;            FIND 'BEGIN OF' IN waline.&lt;/P&gt;&lt;P&gt;            IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;              FIND 'END OF' IN waline.&lt;/P&gt;&lt;P&gt;              IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;                FIND 'VALUE' IN waline.&lt;/P&gt;&lt;P&gt;                IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;                  linetype = type.&lt;/P&gt;&lt;P&gt;                ENDIF.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          ELSE.&lt;/P&gt;&lt;P&gt;            SHIFT waline UP TO include.&lt;/P&gt;&lt;P&gt;            IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;              SPLIT waline AT space INTO junk ilines.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;            SHIFT waline UP TO structure.&lt;/P&gt;&lt;P&gt;            IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;              linetype = structure.&lt;/P&gt;&lt;P&gt;            ELSE.&lt;/P&gt;&lt;P&gt;              CONTINUE.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        linetype = comma.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      CASE linetype.&lt;/P&gt;&lt;P&gt;        WHEN like OR type OR structure.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Work on the appropriate lineType&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          SHIFT waline UP TO space.&lt;/P&gt;&lt;P&gt;          SHIFT waline LEFT DELETING LEADING space.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Are we only to download SAP dictionary structures.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          IF NOT customeronly IS INITIAL.&lt;/P&gt;&lt;P&gt;            TRY.&lt;/P&gt;&lt;P&gt;                IF waline&lt;EM&gt;0(1) = 'Y' OR waline&lt;/EM&gt;0(1) = 'Z' OR waline CS&lt;/P&gt;&lt;P&gt;                customernamerange.&lt;/P&gt;&lt;P&gt;                ELSE.&lt;/P&gt;&lt;P&gt;                  linetype = ''.&lt;/P&gt;&lt;P&gt;                  CONTINUE.&lt;/P&gt;&lt;P&gt;                ENDIF.&lt;/P&gt;&lt;P&gt;              CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;            ENDTRY.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          IF waline CS comma.&lt;/P&gt;&lt;P&gt;            SPLIT waline AT comma INTO head tail.&lt;/P&gt;&lt;P&gt;            IF waline CS dash.&lt;/P&gt;&lt;P&gt;              SPLIT head AT dash INTO head tail.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;            IF waline CS occurs.&lt;/P&gt;&lt;P&gt;              SPLIT waline AT space INTO head tail.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          ELSE.&lt;/P&gt;&lt;P&gt;            IF waline CS period.&lt;/P&gt;&lt;P&gt;              SPLIT waline AT period INTO head tail.&lt;/P&gt;&lt;P&gt;              IF waline CS dash.&lt;/P&gt;&lt;P&gt;                SPLIT head AT dash INTO head tail.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt;              IF waline CS occurs.&lt;/P&gt;&lt;P&gt;                SPLIT waline AT space INTO head tail.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt;            ELSE.&lt;/P&gt;&lt;P&gt;              SPLIT waline AT space INTO head tail.&lt;/P&gt;&lt;P&gt;              IF waline CS dash.&lt;/P&gt;&lt;P&gt;                SPLIT head AT dash INTO head tail.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          IF NOT head IS INITIAL.&lt;/P&gt;&lt;P&gt;            wadictionary-tablename = head.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;          Don't append the object if we already have it listed&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;            READ TABLE ilocdictionary INTO wadictionarycomparison&lt;/P&gt;&lt;P&gt;                                      WITH KEY tablename =&lt;/P&gt;&lt;P&gt;            wadictionary-tablename.&lt;/P&gt;&lt;P&gt;            IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;              PERFORM findtabledescription USING wadictionary-tablename&lt;/P&gt;&lt;P&gt;                                                wadictionary-tabletitle&lt;/P&gt;&lt;P&gt;              .&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              PERFORM findtabledefinition USING wadictionary-tablename&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              wadictionary-istructure[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;            Only append if the item is a table and not a structure or&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;             data element&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              IF NOT wadictionary-istructure[] IS INITIAL.&lt;/P&gt;&lt;P&gt;                APPEND wadictionary TO ilocdictionary.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;            CLEAR wadictionary.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          linetype = ''.&lt;/P&gt;&lt;P&gt;      ENDCASE.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"scanForLikeOrType&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; displayStatus...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM displaystatus USING value(message)&lt;/P&gt;&lt;P&gt;                         value(delay).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      percentage = 0&lt;/P&gt;&lt;P&gt;      text       = message&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      OTHERS     = 1.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF delay &amp;gt; 0.&lt;/P&gt;&lt;P&gt;    WAIT UP TO delay SECONDS.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"displayStatus&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; removeLeadingZeros...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM removeleadingzeros CHANGING myvalue.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      input  = myvalue&lt;/P&gt;&lt;P&gt;    IMPORTING&lt;/P&gt;&lt;P&gt;      output = myvalue&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      OTHERS = 1.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"removeLeadingZeros&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;determineFrontendOPSystem.... Determine the frontend operating system&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*type.&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM determinefrontendopsystem USING separator.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: platformid TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CREATE OBJECT objfile.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CALL METHOD objfile-&amp;gt;get_platform&lt;/P&gt;&lt;P&gt;    RECEIVING&lt;/P&gt;&lt;P&gt;      platform             = platformid&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      cntl_error           = 1&lt;/P&gt;&lt;P&gt;      error_no_gui         = 2&lt;/P&gt;&lt;P&gt;      not_supported_by_gui = 3.&lt;/P&gt;&lt;P&gt;  CASE platformid.&lt;/P&gt;&lt;P&gt;    WHEN objfile-&amp;gt;platform_windows95&lt;/P&gt;&lt;P&gt;         OR objfile-&amp;gt;platform_windows98&lt;/P&gt;&lt;P&gt;         OR objfile-&amp;gt;platform_nt351&lt;/P&gt;&lt;P&gt;         OR objfile-&amp;gt;platform_nt40&lt;/P&gt;&lt;P&gt;         OR objfile-&amp;gt;platform_nt50&lt;/P&gt;&lt;P&gt;         OR objfile-&amp;gt;platform_mac&lt;/P&gt;&lt;P&gt;         OR objfile-&amp;gt;platform_os2.&lt;/P&gt;&lt;P&gt;      separator = '\'.&lt;/P&gt;&lt;P&gt;      frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;    WHEN OTHERS.&lt;/P&gt;&lt;P&gt;      separator = '/'.&lt;/P&gt;&lt;P&gt;      frontendopsystem = unix.&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"determineFrontendOPSystem&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;********************************&lt;/P&gt;&lt;P&gt;*****************************************DOWNLOAD&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;ROUTINES&lt;/STRONG&gt;*********************************************&lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;********************************&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;downloadDDStructures... download database objects to file&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM downloadddstructures USING ilocdictionary LIKE idictionary[]&lt;/P&gt;&lt;P&gt;                                value(pathname)&lt;/P&gt;&lt;P&gt;                                value(htmlfileextension)&lt;/P&gt;&lt;P&gt;                                value(subdir)&lt;/P&gt;&lt;P&gt;                                value(sorttablesasc).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wadictionary&amp;gt; TYPE tdicttable.&lt;/P&gt;&lt;P&gt;  DATA: tablefilename TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: tablefilenamewithpath TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: ihtmltable TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: newsubdirectory TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocdictionary ASSIGNING &amp;lt;wadictionary&amp;gt;.&lt;/P&gt;&lt;P&gt;    PERFORM buildfilename USING pathname&lt;/P&gt;&lt;P&gt;                                subdir&lt;/P&gt;&lt;P&gt;                                &amp;lt;wadictionary&amp;gt;-tablename&lt;/P&gt;&lt;P&gt;                                space&lt;/P&gt;&lt;P&gt;                                space&lt;/P&gt;&lt;P&gt;                                htmlfileextension&lt;/P&gt;&lt;P&gt;                                is_table&lt;/P&gt;&lt;P&gt;                                tablefilenamewithpath&lt;/P&gt;&lt;P&gt;                                tablefilename&lt;/P&gt;&lt;P&gt;                                newsubdirectory.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Try and import a converted table to memory as it will be much&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;   quicker than converting it again&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IMPORT ihtmltable FROM MEMORY ID &amp;lt;wadictionary&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;    IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;      CONCATENATE 'Converting table' &amp;lt;wadictionary&amp;gt;-tablename 'to html'&lt;/P&gt;&lt;P&gt;      INTO statusbarmessage SEPARATED BY space.&lt;/P&gt;&lt;P&gt;      PERFORM displaystatus USING statusbarmessage 0.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      PERFORM convertddtohtml USING &amp;lt;wadictionary&amp;gt;-istructure[]&lt;/P&gt;&lt;P&gt;                                    ihtmltable[]&lt;/P&gt;&lt;P&gt;                                    &amp;lt;wadictionary&amp;gt;-tablename&lt;/P&gt;&lt;P&gt;                                    &amp;lt;wadictionary&amp;gt;-tabletitle&lt;/P&gt;&lt;P&gt;                                    sorttablesasc.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      EXPORT ihtmltable TO MEMORY ID &amp;lt;wadictionary&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM savefiletopc USING ihtmltable[]&lt;/P&gt;&lt;P&gt;                               tablefilenamewithpath&lt;/P&gt;&lt;P&gt;                               tablefilename&lt;/P&gt;&lt;P&gt;                               space&lt;/P&gt;&lt;P&gt;                               space.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    CLEAR ihtmltable[].&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"downloadDDStructures&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;downloadMessageClass...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM downloadmessageclass USING ilocmessages LIKE imessages[]&lt;/P&gt;&lt;P&gt;                                value(messageclassname)&lt;/P&gt;&lt;P&gt;                                value(userfilepath)&lt;/P&gt;&lt;P&gt;                                value(fileextension)&lt;/P&gt;&lt;P&gt;                                value(htmlfileflag)&lt;/P&gt;&lt;P&gt;                                      subdir&lt;/P&gt;&lt;P&gt;                                value(syntaxhighlightcomments)&lt;/P&gt;&lt;P&gt;                                value(customernamerange)&lt;/P&gt;&lt;P&gt;                                value(getincludes)&lt;/P&gt;&lt;P&gt;                                value(getdictstructures)&lt;/P&gt;&lt;P&gt;                                value(userhasselectedmessageclasses).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: htmlpagename TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newfilenameonly TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newfilenamewithpath TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: ihtmltable TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: newsubdirectory TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM appendmessagestofile USING ilocmessages[]&lt;/P&gt;&lt;P&gt;                                     ihtmltable[]&lt;/P&gt;&lt;P&gt;                                     userhasselectedmessageclasses.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE `message class ` messageclassname INTO htmlpagename.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF htmlfileflag IS INITIAL.&lt;/P&gt;&lt;P&gt;    APPEND '' TO ihtmltable.&lt;/P&gt;&lt;P&gt;    APPEND&lt;/P&gt;&lt;P&gt;'----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------" /&gt;&lt;P&gt;' TO ihtmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM buildfootermessage USING 'TEXT'&lt;/P&gt;&lt;P&gt;                                     ihtmltable.&lt;/P&gt;&lt;P&gt;    APPEND ihtmltable.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    PERFORM convertcodetohtml USING ihtmltable[]&lt;/P&gt;&lt;P&gt;                                    htmlpagename&lt;/P&gt;&lt;P&gt;                                    space&lt;/P&gt;&lt;P&gt;                                    is_messageclass&lt;/P&gt;&lt;P&gt;                                    ''&lt;/P&gt;&lt;P&gt;                                    false&lt;/P&gt;&lt;P&gt;                                    syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                    fileextension&lt;/P&gt;&lt;P&gt;                                    customernamerange&lt;/P&gt;&lt;P&gt;                                    getincludes&lt;/P&gt;&lt;P&gt;                                    getdictstructures.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM buildfilename USING userfilepath&lt;/P&gt;&lt;P&gt;                              subdir&lt;/P&gt;&lt;P&gt;                              messageclassname&lt;/P&gt;&lt;P&gt;                              space&lt;/P&gt;&lt;P&gt;                              space&lt;/P&gt;&lt;P&gt;                              fileextension&lt;/P&gt;&lt;P&gt;                              is_messageclass&lt;/P&gt;&lt;P&gt;                              newfilenamewithpath&lt;/P&gt;&lt;P&gt;                              newfilenameonly&lt;/P&gt;&lt;P&gt;                              newsubdirectory.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM savefiletopc USING ihtmltable[]&lt;/P&gt;&lt;P&gt;                             newfilenamewithpath&lt;/P&gt;&lt;P&gt;                             newfilenameonly&lt;/P&gt;&lt;P&gt;                             space&lt;/P&gt;&lt;P&gt;                             space.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"downloadMessageClass&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; appendMessagesToFile&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM appendmessagestofile USING ilocmessages LIKE imessages[]&lt;/P&gt;&lt;P&gt;                                ilochtml LIKE dumihtml[]&lt;/P&gt;&lt;P&gt;                                value(userhasselectedmessageclasses).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: previousmessageid LIKE imessages-arbgb.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wamessage&amp;gt; TYPE tmessage.&lt;/P&gt;&lt;P&gt;  DATA: wahtml TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SORT ilocmessages ASCENDING BY arbgb msgnr.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT ilocmessages[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    IF userhasselectedmessageclasses IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Only add these extra lines if we are actually appending them to&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     the end of some program code&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      APPEND wahtml TO ilochtml.&lt;/P&gt;&lt;P&gt;      APPEND wahtml TO ilochtml.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      APPEND '*Messages' TO ilochtml.&lt;/P&gt;&lt;P&gt;      APPEND&lt;/P&gt;&lt;P&gt;      '*----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------" /&gt;&lt;P&gt;' TO&lt;/P&gt;&lt;P&gt;      ilochtml.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    LOOP AT ilocmessages ASSIGNING &amp;lt;wamessage&amp;gt;.&lt;/P&gt;&lt;P&gt;      IF ( &amp;lt;wamessage&amp;gt;-arbgb &amp;lt;&amp;gt; previousmessageid ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        IF userhasselectedmessageclasses IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Only add this extra lines if we are actually appending them to&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;         the end of some program code&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          APPEND '*' TO ilochtml.&lt;/P&gt;&lt;P&gt;          CONCATENATE `* Message class: ` &amp;lt;wamessage&amp;gt;-arbgb INTO wahtml.&lt;/P&gt;&lt;P&gt;          APPEND wahtml TO ilochtml.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        previousmessageid = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;        CLEAR wahtml.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF userhasselectedmessageclasses IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Only add this extra lines if we are actually appending them to&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       the end of some program code&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        CONCATENATE '*' &amp;lt;wamessage&amp;gt;-msgnr `   ` &amp;lt;wamessage&amp;gt;-text INTO&lt;/P&gt;&lt;P&gt;      wahtml.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        CONCATENATE &amp;lt;wamessage&amp;gt;-msgnr `   ` &amp;lt;wamessage&amp;gt;-text INTO wahtml&lt;/P&gt;&lt;P&gt;        .&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      APPEND wahtml TO ilochtml.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"appendMessagesToFile&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; downloadFunctions...       Download function modules to file.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;FORM downloadfunctions USING ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                             value(userfilepath)&lt;/P&gt;&lt;P&gt;                             value(fileextension)&lt;/P&gt;&lt;P&gt;                             value(subdir)&lt;/P&gt;&lt;P&gt;                             value(downloaddocumentation)&lt;/P&gt;&lt;P&gt;                             value(converttohtml)&lt;/P&gt;&lt;P&gt;                             value(syntaxhighlightcomments)&lt;/P&gt;&lt;P&gt;                             value(customernamerange)&lt;/P&gt;&lt;P&gt;                             value(getincludes)&lt;/P&gt;&lt;P&gt;                             value(getdictstruct)&lt;/P&gt;&lt;P&gt;                             value(textfileextension)&lt;/P&gt;&lt;P&gt;                             value(htmlfileextension)&lt;/P&gt;&lt;P&gt;                             value(sorttablesasc).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: mainsubdir TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: incsubdir TYPE string.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wafunction&amp;gt; TYPE tfunction.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wainclude&amp;gt; TYPE tinclude.&lt;/P&gt;&lt;P&gt;  DATA: iemptytextelements TYPE STANDARD TABLE OF ttexttable.&lt;/P&gt;&lt;P&gt;  DATA: iemptyselectiontexts TYPE STANDARD TABLE OF ttexttable.&lt;/P&gt;&lt;P&gt;  DATA: iemptymessages TYPE STANDARD TABLE OF tmessage.&lt;/P&gt;&lt;P&gt;  DATA: iemptyguititles TYPE STANDARD TABLE OF tguititle.&lt;/P&gt;&lt;P&gt;  DATA: functiondocumentationexists TYPE i VALUE false.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocfunctions ASSIGNING &amp;lt;wafunction&amp;gt;.&lt;/P&gt;&lt;P&gt;    IF subdir IS INITIAL.&lt;/P&gt;&lt;P&gt;      incsubdir = &amp;lt;wafunction&amp;gt;-functionname.&lt;/P&gt;&lt;P&gt;      mainsubdir = ''.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      CONCATENATE subdir &amp;lt;wafunction&amp;gt;-functionname INTO incsubdir&lt;/P&gt;&lt;P&gt;      SEPARATED BY slashseparator.&lt;/P&gt;&lt;P&gt;      mainsubdir = subdir.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF NOT downloaddocumentation IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM downloadfunctiondocs USING &amp;lt;wafunction&amp;gt;-functionname&lt;/P&gt;&lt;P&gt;                                         &amp;lt;wafunction&amp;gt;-functiontitle&lt;/P&gt;&lt;P&gt;                                         userfilepath&lt;/P&gt;&lt;P&gt;                                         fileextension&lt;/P&gt;&lt;P&gt;                                         converttohtml&lt;/P&gt;&lt;P&gt;                                         mainsubdir&lt;/P&gt;&lt;P&gt;                                         functiondocumentationexists.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download main source code&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM readfunctionanddownload USING &amp;lt;wafunction&amp;gt;-itextelements[]&lt;/P&gt;&lt;P&gt;                                         &amp;lt;wafunction&amp;gt;-iselectiontexts[]&lt;/P&gt;&lt;P&gt;                                          &amp;lt;wafunction&amp;gt;-imessages[]&lt;/P&gt;&lt;P&gt;                                          &amp;lt;wafunction&amp;gt;-functionname&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    &amp;lt;wafunction&amp;gt;-functionmaininclude&lt;/P&gt;&lt;P&gt;                                          &amp;lt;wafunction&amp;gt;-functiontitle&lt;/P&gt;&lt;P&gt;                                          userfilepath&lt;/P&gt;&lt;P&gt;                                          fileextension&lt;/P&gt;&lt;P&gt;                                          mainsubdir&lt;/P&gt;&lt;P&gt;                                          converttohtml&lt;/P&gt;&lt;P&gt;                                          functiondocumentationexists&lt;/P&gt;&lt;P&gt;                                          syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                          customernamerange&lt;/P&gt;&lt;P&gt;                                          getincludes&lt;/P&gt;&lt;P&gt;                                          getdictstruct.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download top include&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM readincludeanddownload USING iemptytextelements[]&lt;/P&gt;&lt;P&gt;                                         iemptyselectiontexts[]&lt;/P&gt;&lt;P&gt;                                         iemptymessages[]&lt;/P&gt;&lt;P&gt;                                         iemptyguititles[]&lt;/P&gt;&lt;P&gt;                                         &amp;lt;wafunction&amp;gt;-topincludename&lt;/P&gt;&lt;P&gt;                                         &amp;lt;wafunction&amp;gt;-functionname&lt;/P&gt;&lt;P&gt;                                         &amp;lt;wafunction&amp;gt;-functiontitle&lt;/P&gt;&lt;P&gt;                                         is_function&lt;/P&gt;&lt;P&gt;                                         userfilepath&lt;/P&gt;&lt;P&gt;                                         fileextension&lt;/P&gt;&lt;P&gt;                                         mainsubdir&lt;/P&gt;&lt;P&gt;                                         converttohtml&lt;/P&gt;&lt;P&gt;                                         syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                         customernamerange&lt;/P&gt;&lt;P&gt;                                         getincludes&lt;/P&gt;&lt;P&gt;                                         getdictstruct.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download screens.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT &amp;lt;wafunction&amp;gt;-iscreenflow[] IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM downloadscreens USING &amp;lt;wafunction&amp;gt;-iscreenflow[]&lt;/P&gt;&lt;P&gt;                                    &amp;lt;wafunction&amp;gt;-progname&lt;/P&gt;&lt;P&gt;                                    userfilepath&lt;/P&gt;&lt;P&gt;                                    textfileextension&lt;/P&gt;&lt;P&gt;                                    mainsubdir.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download GUI titles&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT &amp;lt;wafunction&amp;gt;-iguititle[] IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM downloadguititles USING &amp;lt;wafunction&amp;gt;-iguititle&lt;/P&gt;&lt;P&gt;                                      userfilepath&lt;/P&gt;&lt;P&gt;                                      textfileextension&lt;/P&gt;&lt;P&gt;                                      mainsubdir.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download all other includes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;wafunction&amp;gt;-iincludes ASSIGNING &amp;lt;wainclude&amp;gt;.&lt;/P&gt;&lt;P&gt;      PERFORM readincludeanddownload USING iemptytextelements[]&lt;/P&gt;&lt;P&gt;                                           iemptyselectiontexts[]&lt;/P&gt;&lt;P&gt;                                           iemptymessages[]&lt;/P&gt;&lt;P&gt;                                           iemptyguititles[]&lt;/P&gt;&lt;P&gt;                                           &amp;lt;wainclude&amp;gt;-includename&lt;/P&gt;&lt;P&gt;                                           space&lt;/P&gt;&lt;P&gt;                                           &amp;lt;wainclude&amp;gt;-includetitle&lt;/P&gt;&lt;P&gt;                                           is_program&lt;/P&gt;&lt;P&gt;                                           userfilepath&lt;/P&gt;&lt;P&gt;                                           fileextension&lt;/P&gt;&lt;P&gt;                                           incsubdir&lt;/P&gt;&lt;P&gt;                                           converttohtml&lt;/P&gt;&lt;P&gt;                                           syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                           customernamerange&lt;/P&gt;&lt;P&gt;                                           getincludes&lt;/P&gt;&lt;P&gt;                                           getdictstruct.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download all dictionary structures&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT &amp;lt;wafunction&amp;gt;-idictstruct[] IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM downloadddstructures USING &amp;lt;wafunction&amp;gt;-idictstruct[]&lt;/P&gt;&lt;P&gt;                                         userfilepath&lt;/P&gt;&lt;P&gt;                                         htmlfileextension&lt;/P&gt;&lt;P&gt;                                         incsubdir&lt;/P&gt;&lt;P&gt;                                         sorttablesasc .&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"downloadFunctions&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  readIcludeAndDownload...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM readincludeanddownload USING iloctextelements LIKE dumitexttab[]&lt;/P&gt;&lt;P&gt;                                  ilocselectiontexts LIKE dumitexttab[]&lt;/P&gt;&lt;P&gt;                                  ilocmessages LIKE imessages[]&lt;/P&gt;&lt;P&gt;                                  ilocguititles LIKE dumiguititle[]&lt;/P&gt;&lt;P&gt;                                  value(programname)&lt;/P&gt;&lt;P&gt;                                  value(functionname)&lt;/P&gt;&lt;P&gt;                                  value(shorttext)&lt;/P&gt;&lt;P&gt;                                  value(overideprogtype)&lt;/P&gt;&lt;P&gt;                                  value(userfilepath)&lt;/P&gt;&lt;P&gt;                                  value(fileextension)&lt;/P&gt;&lt;P&gt;                                  value(additionalsubdir)&lt;/P&gt;&lt;P&gt;                                  value(converttohtml)&lt;/P&gt;&lt;P&gt;                                  value(syntaxhighlightcomments)&lt;/P&gt;&lt;P&gt;                                  value(customernamerange)&lt;/P&gt;&lt;P&gt;                                  value(getincludes)&lt;/P&gt;&lt;P&gt;                                  value(getdictstructures).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: ilines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: localfilenamewithpath TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: localfilenameonly TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newsubdirectory TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: objectname TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  READ REPORT programname INTO ilines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Download GUI titles for main program&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT ilocguititles[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM appendguititles USING ilocguititles[]&lt;/P&gt;&lt;P&gt;                                  ilines[].&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Download text elements for main program&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT iloctextelements[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM appendtextelements USING iloctextelements[]&lt;/P&gt;&lt;P&gt;                                     ilines[].&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Download selection texts for main program&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT ilocselectiontexts[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM appendselectiontexts USING ilocselectiontexts[]&lt;/P&gt;&lt;P&gt;                                       ilines[].&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Download messages classes for main program.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT ilocmessages[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM appendmessagestofile USING ilocmessages[]&lt;/P&gt;&lt;P&gt;                                       ilines[]&lt;/P&gt;&lt;P&gt;                                       space.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF converttohtml IS INITIAL.&lt;/P&gt;&lt;P&gt;    APPEND '' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND&lt;/P&gt;&lt;P&gt;'----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------" /&gt;&lt;P&gt;' TO ilines.&lt;/P&gt;&lt;P&gt;    PERFORM buildfootermessage USING 'TEXT'&lt;/P&gt;&lt;P&gt;                                     ilines.&lt;/P&gt;&lt;P&gt;    APPEND ilines.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    PERFORM convertcodetohtml USING ilines[]&lt;/P&gt;&lt;P&gt;                                    programname&lt;/P&gt;&lt;P&gt;                                    shorttext&lt;/P&gt;&lt;P&gt;                                    overideprogtype&lt;/P&gt;&lt;P&gt;                                    space&lt;/P&gt;&lt;P&gt;                                    space&lt;/P&gt;&lt;P&gt;                                    syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                    fileextension&lt;/P&gt;&lt;P&gt;                                    customernamerange&lt;/P&gt;&lt;P&gt;                                    getincludes&lt;/P&gt;&lt;P&gt;                                    getdictstructures.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF functionname IS INITIAL.&lt;/P&gt;&lt;P&gt;    objectname = programname.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    objectname = functionname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM buildfilename USING userfilepath&lt;/P&gt;&lt;P&gt;                              additionalsubdir&lt;/P&gt;&lt;P&gt;                              objectname&lt;/P&gt;&lt;P&gt;                              space&lt;/P&gt;&lt;P&gt;                              programname&lt;/P&gt;&lt;P&gt;                              fileextension&lt;/P&gt;&lt;P&gt;                              overideprogtype&lt;/P&gt;&lt;P&gt;                              localfilenamewithpath&lt;/P&gt;&lt;P&gt;                              localfilenameonly&lt;/P&gt;&lt;P&gt;                              newsubdirectory.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM savefiletopc USING ilines[]&lt;/P&gt;&lt;P&gt;                             localfilenamewithpath&lt;/P&gt;&lt;P&gt;                             localfilenameonly&lt;/P&gt;&lt;P&gt;                             space&lt;/P&gt;&lt;P&gt;                             space.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"readIncludeAndDownload&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  readClassAndDownload...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM readclassanddownload USING walocclass TYPE tclass&lt;/P&gt;&lt;P&gt;                                value(classname)&lt;/P&gt;&lt;P&gt;                                value(functionname)&lt;/P&gt;&lt;P&gt;                                value(overideprogtype)&lt;/P&gt;&lt;P&gt;                                value(userfilepath)&lt;/P&gt;&lt;P&gt;                                value(fileextension)&lt;/P&gt;&lt;P&gt;                                value(additionalsubdir)&lt;/P&gt;&lt;P&gt;                                value(converttohtml)&lt;/P&gt;&lt;P&gt;                                value(syntaxhighlightcomments)&lt;/P&gt;&lt;P&gt;                                value(customernamerange)&lt;/P&gt;&lt;P&gt;                                value(getincludes)&lt;/P&gt;&lt;P&gt;                                value(getdictstructures).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: itemplines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: ilines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: localfilenamewithpath TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: localfilenameonly TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newsubdirectory TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: objectname TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: castclassname TYPE program.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Build up attribute comments&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  APPEND '**************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;  APPEND '*   Class attributes.   *' TO ilines.&lt;/P&gt;&lt;P&gt;  APPEND '**************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;  CASE walocclass-exposure.&lt;/P&gt;&lt;P&gt;    WHEN 0.&lt;/P&gt;&lt;P&gt;      APPEND `Instantiation: Private` TO ilines.&lt;/P&gt;&lt;P&gt;    WHEN 1.&lt;/P&gt;&lt;P&gt;      APPEND `Instantiation: Protected` TO ilines.&lt;/P&gt;&lt;P&gt;    WHEN 2.&lt;/P&gt;&lt;P&gt;      APPEND `Instantiation: Public` TO ilines.&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt;  CONCATENATE `Message class: ` walocclass-msg_id INTO ilines.&lt;/P&gt;&lt;P&gt;  APPEND ilines.&lt;/P&gt;&lt;P&gt;  CASE walocclass-state.&lt;/P&gt;&lt;P&gt;    WHEN 0.&lt;/P&gt;&lt;P&gt;      APPEND `State: Only Modelled` TO ilines.&lt;/P&gt;&lt;P&gt;    WHEN 1.&lt;/P&gt;&lt;P&gt;      APPEND `State: Implemented` TO ilines.&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt;  CONCATENATE `Final Indicator: ` walocclass-clsfinal INTO ilines.&lt;/P&gt;&lt;P&gt;  APPEND ilines.&lt;/P&gt;&lt;P&gt;  CONCATENATE `R/3 Release: ` walocclass-r3release INTO ilines.&lt;/P&gt;&lt;P&gt;  APPEND ilines.&lt;/P&gt;&lt;P&gt;  CLEAR ilines.&lt;/P&gt;&lt;P&gt;  APPEND ilines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  castclassname = walocclass-publicclasskey.&lt;/P&gt;&lt;P&gt;  READ REPORT castclassname INTO itemplines.&lt;/P&gt;&lt;P&gt;  IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;    PERFORM reformatclasscode USING itemplines[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND '****************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND '*   Public section of class.*' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND '****************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;    LOOP AT itemplines.&lt;/P&gt;&lt;P&gt;      APPEND itemplines TO ilines.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  castclassname = walocclass-privateclasskey.&lt;/P&gt;&lt;P&gt;  READ REPORT castclassname INTO itemplines.&lt;/P&gt;&lt;P&gt;  IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;    PERFORM reformatclasscode USING itemplines[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND ilines.&lt;/P&gt;&lt;P&gt;    APPEND '****************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND '*   Private section of class. *' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND '****************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;    LOOP AT itemplines.&lt;/P&gt;&lt;P&gt;      APPEND itemplines TO ilines.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  castclassname = walocclass-protectedclasskey.&lt;/P&gt;&lt;P&gt;  READ REPORT castclassname INTO itemplines.&lt;/P&gt;&lt;P&gt;  IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;    PERFORM reformatclasscode USING itemplines[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND ilines.&lt;/P&gt;&lt;P&gt;    APPEND '*************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND '*   Protected section of class. *' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND '*************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;    LOOP AT itemplines.&lt;/P&gt;&lt;P&gt;      APPEND itemplines TO ilines.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  castclassname = walocclass-typesclasskey.&lt;/P&gt;&lt;P&gt;  READ REPORT castclassname INTO itemplines.&lt;/P&gt;&lt;P&gt;  IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;    APPEND ilines.&lt;/P&gt;&lt;P&gt;    APPEND '*************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND '*   Types section of class.*' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND '*************************************************' TO ilines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    LOOP AT itemplines.&lt;/P&gt;&lt;P&gt;      APPEND itemplines TO ilines.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Download text elements for this class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT walocclass-itextelements[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM appendtextelements USING walocclass-itextelements[]&lt;/P&gt;&lt;P&gt;                                     ilines[].&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Download messages classes for this class.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT walocclass-imessages[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM appendmessagestofile USING walocclass-imessages[]&lt;/P&gt;&lt;P&gt;                                       ilines[]&lt;/P&gt;&lt;P&gt;                                       space.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF converttohtml IS INITIAL.&lt;/P&gt;&lt;P&gt;    APPEND '' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND '*************************************************' TO ilines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM buildfootermessage USING 'TEXT'&lt;/P&gt;&lt;P&gt;                                     ilines.&lt;/P&gt;&lt;P&gt;    APPEND ilines.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    PERFORM convertclasstohtml USING ilines[]&lt;/P&gt;&lt;P&gt;                                    classname&lt;/P&gt;&lt;P&gt;                                    walocclass-descript&lt;/P&gt;&lt;P&gt;                                    overideprogtype&lt;/P&gt;&lt;P&gt;                                    syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                    fileextension&lt;/P&gt;&lt;P&gt;                                    customernamerange&lt;/P&gt;&lt;P&gt;                                    getdictstructures.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF functionname IS INITIAL.&lt;/P&gt;&lt;P&gt;    objectname = classname.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    objectname = functionname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM buildfilename USING userfilepath&lt;/P&gt;&lt;P&gt;                              additionalsubdir&lt;/P&gt;&lt;P&gt;                              objectname&lt;/P&gt;&lt;P&gt;                              space&lt;/P&gt;&lt;P&gt;                              classname&lt;/P&gt;&lt;P&gt;                              fileextension&lt;/P&gt;&lt;P&gt;                              overideprogtype&lt;/P&gt;&lt;P&gt;                              localfilenamewithpath&lt;/P&gt;&lt;P&gt;                              localfilenameonly&lt;/P&gt;&lt;P&gt;                              newsubdirectory.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM savefiletopc USING ilines[]&lt;/P&gt;&lt;P&gt;                             localfilenamewithpath&lt;/P&gt;&lt;P&gt;                             localfilenameonly&lt;/P&gt;&lt;P&gt;                             space&lt;/P&gt;&lt;P&gt;                             space.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"readClassAndDownload&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  readMethodAndDownload...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM readmethodanddownload USING walocmethod TYPE tmethod&lt;/P&gt;&lt;P&gt;                                value(methodname)&lt;/P&gt;&lt;P&gt;                                value(methodkey)&lt;/P&gt;&lt;P&gt;                                value(functionname)&lt;/P&gt;&lt;P&gt;                                value(overideprogtype)&lt;/P&gt;&lt;P&gt;                                value(userfilepath)&lt;/P&gt;&lt;P&gt;                                value(fileextension)&lt;/P&gt;&lt;P&gt;                                value(additionalsubdir)&lt;/P&gt;&lt;P&gt;                                value(converttohtml)&lt;/P&gt;&lt;P&gt;                                value(syntaxhighlightcomments)&lt;/P&gt;&lt;P&gt;                                value(customernamerange)&lt;/P&gt;&lt;P&gt;                                value(getincludes)&lt;/P&gt;&lt;P&gt;                                value(getdictstructures).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: ilines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: itemplines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: localfilenamewithpath TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: localfilenameonly TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newsubdirectory TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: objectname TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: castmethodkey TYPE program.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Add the method scope to the downloaded file&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  APPEND '*************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;  APPEND '*   Method attributes.*' TO ilines.&lt;/P&gt;&lt;P&gt;  APPEND '*************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;  CASE walocmethod-exposure.&lt;/P&gt;&lt;P&gt;    WHEN 0.&lt;/P&gt;&lt;P&gt;      APPEND `Instantiation: Private` TO ilines.&lt;/P&gt;&lt;P&gt;    WHEN 1.&lt;/P&gt;&lt;P&gt;      APPEND `Instantiation: Protected` TO ilines.&lt;/P&gt;&lt;P&gt;    WHEN 2.&lt;/P&gt;&lt;P&gt;      APPEND `Instantiation: Public` TO ilines.&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt;  APPEND '*************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;  APPEND '' TO ilines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  castmethodkey = walocmethod-methodkey.&lt;/P&gt;&lt;P&gt;  READ REPORT castmethodkey INTO itemplines.&lt;/P&gt;&lt;P&gt;  LOOP AT itemplines.&lt;/P&gt;&lt;P&gt;    APPEND itemplines TO ilines.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF converttohtml IS INITIAL.&lt;/P&gt;&lt;P&gt;    APPEND '' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND '*************************************************' TO ilines.&lt;/P&gt;&lt;P&gt;    PERFORM buildfootermessage USING 'TEXT'&lt;/P&gt;&lt;P&gt;                                     ilines.&lt;/P&gt;&lt;P&gt;    APPEND ilines.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    PERFORM convertcodetohtml USING ilines[]&lt;/P&gt;&lt;P&gt;                                    methodname&lt;/P&gt;&lt;P&gt;                                    walocmethod-descript&lt;/P&gt;&lt;P&gt;                                    overideprogtype&lt;/P&gt;&lt;P&gt;                                    space&lt;/P&gt;&lt;P&gt;                                    space&lt;/P&gt;&lt;P&gt;                                    syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                    fileextension&lt;/P&gt;&lt;P&gt;                                    customernamerange&lt;/P&gt;&lt;P&gt;                                    getincludes&lt;/P&gt;&lt;P&gt;                                    getdictstructures.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF functionname IS INITIAL.&lt;/P&gt;&lt;P&gt;    objectname = methodname.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    objectname = functionname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM buildfilename USING userfilepath&lt;/P&gt;&lt;P&gt;                              additionalsubdir&lt;/P&gt;&lt;P&gt;                              objectname&lt;/P&gt;&lt;P&gt;                              space&lt;/P&gt;&lt;P&gt;                              methodname&lt;/P&gt;&lt;P&gt;                              fileextension&lt;/P&gt;&lt;P&gt;                              overideprogtype&lt;/P&gt;&lt;P&gt;                              localfilenamewithpath&lt;/P&gt;&lt;P&gt;                              localfilenameonly&lt;/P&gt;&lt;P&gt;                              newsubdirectory.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM savefiletopc USING ilines[]&lt;/P&gt;&lt;P&gt;                             localfilenamewithpath&lt;/P&gt;&lt;P&gt;                             localfilenameonly&lt;/P&gt;&lt;P&gt;                             space&lt;/P&gt;&lt;P&gt;                             space.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "readMethodAndDownload&lt;/P&gt;&lt;P&gt;"readMethodAndDownload&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  readFunctionAndDownload...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;FORM readfunctionanddownload USING iloctextelements LIKE dumitexttab[]&lt;/P&gt;&lt;P&gt;                                   ilocselectiontexts LIKE dumitexttab[]&lt;/P&gt;&lt;P&gt;                                   ilocmessages LIKE imessages[]&lt;/P&gt;&lt;P&gt;                                   value(functionname)&lt;/P&gt;&lt;P&gt;                                   value(functioninternalname)&lt;/P&gt;&lt;P&gt;                                   value(shorttext)&lt;/P&gt;&lt;P&gt;                                   value(userfilepath)&lt;/P&gt;&lt;P&gt;                                   value(fileextension)&lt;/P&gt;&lt;P&gt;                                   value(subdir)&lt;/P&gt;&lt;P&gt;                                   value(converttohtml)&lt;/P&gt;&lt;P&gt;                                   value(functiondocumentationexists)&lt;/P&gt;&lt;P&gt;                                   value(syntaxhighlightcomments)&lt;/P&gt;&lt;P&gt;                                   value(customernamerange)&lt;/P&gt;&lt;P&gt;                                   value(getincludes)&lt;/P&gt;&lt;P&gt;                                   value(getdictstructures).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: ilines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: localfilenamewithpath TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: localfilenameonly TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newsubdirectory TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  READ REPORT functioninternalname INTO ilines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;If we found any text elements for this function then we ought to&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*append them to the main include.&lt;/P&gt;&lt;P&gt;  IF NOT iloctextelements[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM appendtextelements USING iloctextelements[]&lt;/P&gt;&lt;P&gt;                                     ilines[].&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;If we found any message classes for this function then we ought to&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*append them to the main include.&lt;/P&gt;&lt;P&gt;  IF NOT ilocmessages[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    PERFORM appendmessagestofile USING ilocmessages[]&lt;/P&gt;&lt;P&gt;                                       ilines[]&lt;/P&gt;&lt;P&gt;                                       space.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF converttohtml IS INITIAL.&lt;/P&gt;&lt;P&gt;    APPEND '' TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND&lt;/P&gt;&lt;P&gt;'----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------" /&gt;&lt;P&gt;' TO ilines.&lt;/P&gt;&lt;P&gt;    PERFORM buildfootermessage USING 'TEXT'&lt;/P&gt;&lt;P&gt;                                     ilines.&lt;/P&gt;&lt;P&gt;    APPEND ilines.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    PERFORM convertfunctiontohtml USING ilines[]&lt;/P&gt;&lt;P&gt;                                        functionname&lt;/P&gt;&lt;P&gt;                                        shorttext&lt;/P&gt;&lt;P&gt;                                        is_function&lt;/P&gt;&lt;P&gt;                                        functiondocumentationexists&lt;/P&gt;&lt;P&gt;                                        true&lt;/P&gt;&lt;P&gt;                                        syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                        fileextension&lt;/P&gt;&lt;P&gt;                                        customernamerange&lt;/P&gt;&lt;P&gt;                                        getincludes&lt;/P&gt;&lt;P&gt;                                        getdictstructures.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM buildfilename USING userfilepath&lt;/P&gt;&lt;P&gt;                              subdir&lt;/P&gt;&lt;P&gt;                              functionname&lt;/P&gt;&lt;P&gt;                              space&lt;/P&gt;&lt;P&gt;                              space&lt;/P&gt;&lt;P&gt;                              fileextension&lt;/P&gt;&lt;P&gt;                              is_function&lt;/P&gt;&lt;P&gt;                              localfilenamewithpath&lt;/P&gt;&lt;P&gt;                              localfilenameonly&lt;/P&gt;&lt;P&gt;                              newsubdirectory.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM savefiletopc USING ilines[]&lt;/P&gt;&lt;P&gt;                             localfilenamewithpath&lt;/P&gt;&lt;P&gt;                             localfilenameonly&lt;/P&gt;&lt;P&gt;                             space&lt;/P&gt;&lt;P&gt;                             space.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "readFunctionAndDownload&lt;/P&gt;&lt;P&gt;"readFunctionAndDownload&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; buildFilename...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM buildfilename USING value(userpath)&lt;/P&gt;&lt;P&gt;                         value(additionalsubdirectory)&lt;/P&gt;&lt;P&gt;                         value(objectname)&lt;/P&gt;&lt;P&gt;                         value(mainfunctionno)&lt;/P&gt;&lt;P&gt;                         value(includename)&lt;/P&gt;&lt;P&gt;                         value(fileextension)&lt;/P&gt;&lt;P&gt;                         value(downloadtype)&lt;/P&gt;&lt;P&gt;                               newfilenamewithpath&lt;/P&gt;&lt;P&gt;                               newfilenameonly&lt;/P&gt;&lt;P&gt;                               newsubdirectory.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;If we are running on a non UNIX environment we will need to remove&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*forward slashes from the additional path.&lt;/P&gt;&lt;P&gt;  IF frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;    IF NOT additionalsubdirectory IS INITIAL.&lt;/P&gt;&lt;P&gt;      TRANSLATE additionalsubdirectory USING '/_'.&lt;/P&gt;&lt;P&gt;      IF additionalsubdirectory+0(1) = '_'.&lt;/P&gt;&lt;P&gt;        SHIFT additionalsubdirectory LEFT BY 1 PLACES.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CASE downloadtype.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN is_program.&lt;/P&gt;&lt;P&gt;      IF additionalsubdirectory IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator objectname period&lt;/P&gt;&lt;P&gt;fileextension INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator objectname period&lt;/P&gt;&lt;P&gt;fileextension INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Function Modules&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN is_function.&lt;/P&gt;&lt;P&gt;      IF additionalsubdirectory IS INITIAL.&lt;/P&gt;&lt;P&gt;        FIND 'top' IN includename IGNORING CASE.&lt;/P&gt;&lt;P&gt;        IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;          CONCATENATE userpath slashseparator objectname&lt;/P&gt;&lt;P&gt;                               slashseparator 'Global-' objectname&lt;/P&gt;&lt;P&gt;                               period fileextension&lt;/P&gt;&lt;P&gt;                               INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt;        ELSE.&lt;/P&gt;&lt;P&gt;          IF includename CS mainfunctionno AND NOT mainfunctionno IS&lt;/P&gt;&lt;P&gt;INITIAL.&lt;/P&gt;&lt;P&gt;            CONCATENATE userpath slashseparator objectname&lt;/P&gt;&lt;P&gt;                                 slashseparator objectname&lt;/P&gt;&lt;P&gt;                                 period fileextension&lt;/P&gt;&lt;P&gt;                                 INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt;          ELSE.&lt;/P&gt;&lt;P&gt;            CONCATENATE userpath slashseparator objectname&lt;/P&gt;&lt;P&gt;                                 slashseparator objectname&lt;/P&gt;&lt;P&gt;                                 period fileextension&lt;/P&gt;&lt;P&gt;                                 INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;        newsubdirectory = objectname.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        FIND 'top' IN includename IGNORING CASE.&lt;/P&gt;&lt;P&gt;        IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;          CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                               slashseparator objectname&lt;/P&gt;&lt;P&gt;                               slashseparator 'Global-' objectname&lt;/P&gt;&lt;P&gt;                               period fileextension&lt;/P&gt;&lt;P&gt;                               INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt;        ELSE.&lt;/P&gt;&lt;P&gt;          IF includename CS mainfunctionno AND NOT mainfunctionno IS&lt;/P&gt;&lt;P&gt;INITIAL.&lt;/P&gt;&lt;P&gt;            CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                                 slashseparator objectname&lt;/P&gt;&lt;P&gt;                                 slashseparator objectname&lt;/P&gt;&lt;P&gt;                                 period fileextension&lt;/P&gt;&lt;P&gt;                                 INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt;          ELSE.&lt;/P&gt;&lt;P&gt;            CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                                 slashseparator objectname&lt;/P&gt;&lt;P&gt;                                 slashseparator objectname&lt;/P&gt;&lt;P&gt;                                 period fileextension&lt;/P&gt;&lt;P&gt;                                 INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;        CONCATENATE additionalsubdirectory slashseparator objectname&lt;/P&gt;&lt;P&gt;                                           INTO newsubdirectory.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Table definition&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN is_table.&lt;/P&gt;&lt;P&gt;      IF additionalsubdirectory IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator objectname&lt;/P&gt;&lt;P&gt;                             slashseparator 'Dictionary-'&lt;/P&gt;&lt;P&gt;                             objectname period fileextension&lt;/P&gt;&lt;P&gt;                             INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator objectname INTO&lt;/P&gt;&lt;P&gt;newsubdirectory.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator objectname&lt;/P&gt;&lt;P&gt;                             slashseparator 'Dictionary-'&lt;/P&gt;&lt;P&gt;                             objectname period fileextension&lt;/P&gt;&lt;P&gt;                             INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator objectname INTO&lt;/P&gt;&lt;P&gt;newsubdirectory.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Program &amp;amp; Function documentation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN is_documentation.&lt;/P&gt;&lt;P&gt;      IF additionalsubdirectory IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator objectname&lt;/P&gt;&lt;P&gt;                             slashseparator 'Docs-'&lt;/P&gt;&lt;P&gt;                             objectname period&lt;/P&gt;&lt;P&gt;                             fileextension&lt;/P&gt;&lt;P&gt;                             INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator objectname INTO&lt;/P&gt;&lt;P&gt;newsubdirectory.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator objectname&lt;/P&gt;&lt;P&gt;                             slashseparator 'Docs-'&lt;/P&gt;&lt;P&gt;                             objectname period fileextension&lt;/P&gt;&lt;P&gt;                             INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;slashseparator objectname INTO newsubdirectory.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Screens&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN is_screen.&lt;/P&gt;&lt;P&gt;      IF additionalsubdirectory IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator 'Screens'&lt;/P&gt;&lt;P&gt;                             slashseparator 'screen_'&lt;/P&gt;&lt;P&gt;                             objectname period&lt;/P&gt;&lt;P&gt;                             fileextension INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator 'Screens' INTO&lt;/P&gt;&lt;P&gt;newsubdirectory.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator 'Screens'&lt;/P&gt;&lt;P&gt;                             slashseparator 'screen_'&lt;/P&gt;&lt;P&gt;                             objectname period&lt;/P&gt;&lt;P&gt;                             fileextension INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator 'Screens' INTO&lt;/P&gt;&lt;P&gt;newsubdirectory.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  GUI title&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN is_guititle.&lt;/P&gt;&lt;P&gt;      IF additionalsubdirectory IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator 'Screens'&lt;/P&gt;&lt;P&gt;                             slashseparator 'gui_title_'&lt;/P&gt;&lt;P&gt;                             objectname period&lt;/P&gt;&lt;P&gt;                             fileextension INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator 'Screens'&lt;/P&gt;&lt;P&gt;        INTO newsubdirectory.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator 'Screens'&lt;/P&gt;&lt;P&gt;                             slashseparator 'gui_title_'&lt;/P&gt;&lt;P&gt;                             objectname period&lt;/P&gt;&lt;P&gt;                             fileextension INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator 'Screens'&lt;/P&gt;&lt;P&gt;                             INTO newsubdirectory.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Message Class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN is_messageclass.&lt;/P&gt;&lt;P&gt;      IF additionalsubdirectory IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator objectname&lt;/P&gt;&lt;P&gt;                             slashseparator 'Message class-'&lt;/P&gt;&lt;P&gt;                             objectname period&lt;/P&gt;&lt;P&gt;                             fileextension&lt;/P&gt;&lt;P&gt;                             INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator objectname INTO&lt;/P&gt;&lt;P&gt;newsubdirectory.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator objectname&lt;/P&gt;&lt;P&gt;                             slashseparator 'Message class-'&lt;/P&gt;&lt;P&gt;                             objectname period fileextension&lt;/P&gt;&lt;P&gt;                             INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;slashseparator objectname INTO newsubdirectory.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Class definition&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN is_class.&lt;/P&gt;&lt;P&gt;      IF additionalsubdirectory IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator objectname&lt;/P&gt;&lt;P&gt;                             slashseparator 'Class-'&lt;/P&gt;&lt;P&gt;                             objectname period fileextension&lt;/P&gt;&lt;P&gt;                             INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator objectname INTO&lt;/P&gt;&lt;P&gt;newsubdirectory.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator objectname&lt;/P&gt;&lt;P&gt;                             slashseparator 'Class-'&lt;/P&gt;&lt;P&gt;                             objectname period fileextension&lt;/P&gt;&lt;P&gt;                             INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator objectname INTO&lt;/P&gt;&lt;P&gt;newsubdirectory.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Class definition&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    WHEN is_method.&lt;/P&gt;&lt;P&gt;      IF additionalsubdirectory IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator 'Method-'&lt;/P&gt;&lt;P&gt;                             objectname period fileextension&lt;/P&gt;&lt;P&gt;                             INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator objectname INTO&lt;/P&gt;&lt;P&gt;newsubdirectory.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator 'Method-'&lt;/P&gt;&lt;P&gt;                             objectname period fileextension&lt;/P&gt;&lt;P&gt;                             INTO newfilenamewithpath.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE userpath slashseparator additionalsubdirectory&lt;/P&gt;&lt;P&gt;                             slashseparator objectname INTO&lt;/P&gt;&lt;P&gt;newsubdirectory.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;  ENDCASE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE objectname period fileextension INTO newfilenameonly.&lt;/P&gt;&lt;P&gt;  TRANSLATE newfilenameonly TO LOWER CASE.&lt;/P&gt;&lt;P&gt;  TRANSLATE newfilenamewithpath TO LOWER CASE.&lt;/P&gt;&lt;P&gt;  TRANSLATE newsubdirectory TO LOWER CASE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;If we are running on a non UNIX environment we will need to remove&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*forward slashes from the filename.&lt;/P&gt;&lt;P&gt;  IF frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;    TRANSLATE newfilenameonly USING '/_'.&lt;/P&gt;&lt;P&gt;    TRANSLATE newfilenamewithpath USING '/_'.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "buildFilename&lt;/P&gt;&lt;P&gt;"buildFilename&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; saveFileToPc...    write an internal table to file&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;FORM savefiletopc USING idownload TYPE STANDARD TABLE&lt;/P&gt;&lt;P&gt;                        value(filenamewithpath)&lt;/P&gt;&lt;P&gt;                        value(filename)&lt;/P&gt;&lt;P&gt;                        value(writefieldseparator)&lt;/P&gt;&lt;P&gt;                        value(truncatetrailingblanks).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: statusmessage TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: objfile TYPE REF TO cl_gui_frontend_services.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE `Downloading: ` filename INTO statusmessage.&lt;/P&gt;&lt;P&gt;  PERFORM displaystatus USING statusmessage 0.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CREATE OBJECT objfile.&lt;/P&gt;&lt;P&gt;  CALL METHOD objfile-&amp;gt;gui_download&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      filename                = filenamewithpath&lt;/P&gt;&lt;P&gt;      filetype                = 'ASC'&lt;/P&gt;&lt;P&gt;      write_field_separator   = writefieldseparator&lt;/P&gt;&lt;P&gt;      trunc_trailing_blanks   = truncatetrailingblanks&lt;/P&gt;&lt;P&gt;    CHANGING&lt;/P&gt;&lt;P&gt;      data_tab                = idownload[]&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      file_write_error        = 1&lt;/P&gt;&lt;P&gt;      no_batch                = 2&lt;/P&gt;&lt;P&gt;      gui_refuse_filetransfer = 3&lt;/P&gt;&lt;P&gt;      invalid_type            = 4&lt;/P&gt;&lt;P&gt;      no_authority            = 5&lt;/P&gt;&lt;P&gt;      unknown_error           = 6&lt;/P&gt;&lt;P&gt;      header_not_allowed      = 7&lt;/P&gt;&lt;P&gt;      separator_not_allowed   = 8&lt;/P&gt;&lt;P&gt;      filesize_not_allowed    = 9&lt;/P&gt;&lt;P&gt;      header_too_long         = 10&lt;/P&gt;&lt;P&gt;      dp_error_create         = 11&lt;/P&gt;&lt;P&gt;      dp_error_send           = 12&lt;/P&gt;&lt;P&gt;      dp_error_write          = 13&lt;/P&gt;&lt;P&gt;      unknown_dp_error        = 14&lt;/P&gt;&lt;P&gt;      access_denied           = 15&lt;/P&gt;&lt;P&gt;      dp_out_of_memory        = 16&lt;/P&gt;&lt;P&gt;      disk_full               = 17&lt;/P&gt;&lt;P&gt;      dp_timeout              = 18&lt;/P&gt;&lt;P&gt;      file_not_found          = 19&lt;/P&gt;&lt;P&gt;      dataprovider_exception  = 20&lt;/P&gt;&lt;P&gt;      control_flush_error     = 21&lt;/P&gt;&lt;P&gt;      not_supported_by_gui    = 22&lt;/P&gt;&lt;P&gt;      error_no_gui            = 23.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;P&gt;    CONCATENATE `File save error: ` filename INTO statusmessage.&lt;/P&gt;&lt;P&gt;    PERFORM displaystatus USING statusmessage 3.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "saveFileToPc&lt;/P&gt;&lt;P&gt;"saveFileToPc&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;appendTextElements...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM appendtextelements USING iloctextelements LIKE dumitexttab[]&lt;/P&gt;&lt;P&gt;                              iloclines LIKE dumihtml[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: tablelines TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;watextelement&amp;gt; TYPE ttexttable.&lt;/P&gt;&lt;P&gt;  DATA: waline TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  tablelines = LINES( iloctextelements ).&lt;/P&gt;&lt;P&gt;  IF tablelines &amp;gt; 0.&lt;/P&gt;&lt;P&gt;    APPEND '' TO iloclines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND '*Text elements' TO iloclines.&lt;/P&gt;&lt;P&gt;    APPEND '*----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------" /&gt;&lt;P&gt;'&lt;/P&gt;&lt;P&gt; TO  iloclines.&lt;/P&gt;&lt;P&gt;    LOOP AT iloctextelements ASSIGNING &amp;lt;watextelement&amp;gt;.&lt;/P&gt;&lt;P&gt;      CONCATENATE '*  ' &amp;lt;watextelement&amp;gt;-key &amp;lt;watextelement&amp;gt;-entry INTO&lt;/P&gt;&lt;P&gt;waline SEPARATED BY space.&lt;/P&gt;&lt;P&gt;      APPEND waline TO iloclines.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "appendTextElements&lt;/P&gt;&lt;P&gt;"appendTextElements&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;appendGUITitles...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM appendguititles USING ilocguititles LIKE dumiguititle[]&lt;/P&gt;&lt;P&gt;                           iloclines LIKE dumihtml[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: tablelines TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waguititle&amp;gt; TYPE tguititle.&lt;/P&gt;&lt;P&gt;  DATA: waline TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  tablelines = LINES( ilocguititles ).&lt;/P&gt;&lt;P&gt;  IF tablelines &amp;gt; 0.&lt;/P&gt;&lt;P&gt;    APPEND '' TO iloclines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND '*GUI Texts' TO iloclines.&lt;/P&gt;&lt;P&gt;    APPEND '*----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------" /&gt;&lt;P&gt;'&lt;/P&gt;&lt;P&gt; TO  iloclines.&lt;/P&gt;&lt;P&gt;    LOOP AT ilocguititles ASSIGNING &amp;lt;waguititle&amp;gt;.&lt;/P&gt;&lt;P&gt;      CONCATENATE '*  ' &amp;lt;waguititle&amp;gt;-obj_code '--&amp;gt;' &amp;lt;waguititle&amp;gt;-text&lt;/P&gt;&lt;P&gt;INTO waline SEPARATED BY space.&lt;/P&gt;&lt;P&gt;      APPEND waline TO iloclines.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "appendGUITitles&lt;/P&gt;&lt;P&gt;"appendGUITitles&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;appendSelectionTexts...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM appendselectiontexts USING ilocselectiontexts LIKE dumitexttab[]&lt;/P&gt;&lt;P&gt;                                iloclines LIKE dumihtml[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: tablelines TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waselectiontext&amp;gt; TYPE ttexttable.&lt;/P&gt;&lt;P&gt;  DATA: waline TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  tablelines = LINES( ilocselectiontexts ).&lt;/P&gt;&lt;P&gt;  IF tablelines &amp;gt; 0.&lt;/P&gt;&lt;P&gt;    APPEND '' TO iloclines.&lt;/P&gt;&lt;P&gt;    APPEND '' TO iloclines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND '*Selection texts' TO iloclines.&lt;/P&gt;&lt;P&gt;    APPEND '*----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------" /&gt;&lt;P&gt;'&lt;/P&gt;&lt;P&gt; TO  iloclines.&lt;/P&gt;&lt;P&gt;    LOOP AT ilocselectiontexts ASSIGNING &amp;lt;waselectiontext&amp;gt;.&lt;/P&gt;&lt;P&gt;      CONCATENATE '*  ' &amp;lt;waselectiontext&amp;gt;-key &amp;lt;waselectiontext&amp;gt;-entry&lt;/P&gt;&lt;P&gt;INTO waline SEPARATED BY space.&lt;/P&gt;&lt;P&gt;      APPEND waline TO iloclines.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "appendSelectionTexts&lt;/P&gt;&lt;P&gt;"appendSelectionTexts&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;downloadFunctionDocs...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM downloadfunctiondocs USING value(functionname)&lt;/P&gt;&lt;P&gt;                                value(functiondescription)&lt;/P&gt;&lt;P&gt;                                value(userfilepath)&lt;/P&gt;&lt;P&gt;                                value(fileextension)&lt;/P&gt;&lt;P&gt;                                value(converttohtml)&lt;/P&gt;&lt;P&gt;                                      subdir&lt;/P&gt;&lt;P&gt;                                      documentationdownloaded.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: ilines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: idocumentation TYPE STANDARD TABLE OF funct WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: iexceptions TYPE STANDARD TABLE OF rsexc WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: iexport TYPE STANDARD TABLE OF rsexp WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: iparameter TYPE STANDARD TABLE OF rsimp WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: itables TYPE STANDARD TABLE OF rstbl WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: iscriptlines TYPE STANDARD TABLE OF tline WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: htmlpagename TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newfilenamewithpath TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newfilenameonly TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: object LIKE dokhl-object.&lt;/P&gt;&lt;P&gt;  DATA: stringlength TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  DATA: newsubdirectory TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: waline(255).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  documentationdownloaded = false.&lt;/P&gt;&lt;P&gt;  object = functionname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'FUNCTION_IMPORT_DOKU'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      funcname           = functionname&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      dokumentation      = idocumentation&lt;/P&gt;&lt;P&gt;      exception_list     = iexceptions&lt;/P&gt;&lt;P&gt;      export_parameter   = iexport&lt;/P&gt;&lt;P&gt;      import_parameter   = iparameter&lt;/P&gt;&lt;P&gt;      tables_parameter   = itables&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      error_message      = 1&lt;/P&gt;&lt;P&gt;      function_not_found = 2&lt;/P&gt;&lt;P&gt;      invalid_name       = 3&lt;/P&gt;&lt;P&gt;      OTHERS             = 4.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'DOCU_GET'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      id                     = 'FU'&lt;/P&gt;&lt;P&gt;      langu                  = sy-langu&lt;/P&gt;&lt;P&gt;      object                 = object&lt;/P&gt;&lt;P&gt;      typ                    = 'T'&lt;/P&gt;&lt;P&gt;      version_active_or_last = 'L'&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      line                   = iscriptlines&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      no_docu_on_screen      = 1&lt;/P&gt;&lt;P&gt;      no_docu_self_def       = 2&lt;/P&gt;&lt;P&gt;      no_docu_temp           = 3&lt;/P&gt;&lt;P&gt;      ret_code               = 4&lt;/P&gt;&lt;P&gt;      OTHERS                 = 5.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF sy-subrc = 0 AND NOT ( iscriptlines[] IS INITIAL ).&lt;/P&gt;&lt;P&gt;    APPEND 'SHORT TEXT' TO ilines.&lt;/P&gt;&lt;P&gt;    CONCATENATE space functiondescription INTO functiondescription&lt;/P&gt;&lt;P&gt;SEPARATED BY space.&lt;/P&gt;&lt;P&gt;    APPEND functiondescription TO ilines.&lt;/P&gt;&lt;P&gt;    APPEND space TO ilines.&lt;/P&gt;&lt;P&gt;    LOOP AT iscriptlines.&lt;/P&gt;&lt;P&gt;      MOVE iscriptlines-tdline TO ilines.&lt;/P&gt;&lt;P&gt;      CONCATENATE space ilines INTO ilines SEPARATED BY space.&lt;/P&gt;&lt;P&gt;      WHILE ilines CP '&amp;amp;&lt;STRONG&gt;' OR ilines CP '&lt;/STRONG&gt;&amp;amp;'.&lt;/P&gt;&lt;P&gt;        REPLACE '&amp;amp;' INTO ilines WITH space.&lt;/P&gt;&lt;P&gt;        SHIFT ilines LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;      ENDWHILE.&lt;/P&gt;&lt;P&gt;      APPEND ilines.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    CLEAR ilines.&lt;/P&gt;&lt;P&gt;    IF NOT ( idocumentation[] IS INITIAL ).&lt;/P&gt;&lt;P&gt;      APPEND ilines.&lt;/P&gt;&lt;P&gt;      APPEND 'PARAMETER DOCUMENTATION' TO ilines.&lt;/P&gt;&lt;P&gt;      APPEND '----&lt;/P&gt;&lt;HR originaltext="------------------" /&gt;&lt;P&gt;' TO ilines.&lt;/P&gt;&lt;P&gt;      APPEND ilines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      DESCRIBE FIELD idocumentation-parameter LENGTH stringlength IN&lt;/P&gt;&lt;P&gt;CHARACTER MODE.&lt;/P&gt;&lt;P&gt;      stringlength = stringlength + 3.&lt;/P&gt;&lt;P&gt;      LOOP AT idocumentation.&lt;/P&gt;&lt;P&gt;        MOVE idocumentation-parameter TO waline.&lt;/P&gt;&lt;P&gt;        MOVE idocumentation-stext TO waline+stringlength.&lt;/P&gt;&lt;P&gt;        APPEND waline TO ilines.&lt;/P&gt;&lt;P&gt;      ENDLOOP.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    CONCATENATE `Documentation - ` functionname INTO htmlpagename.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF converttohtml IS INITIAL.&lt;/P&gt;&lt;P&gt;      APPEND ilines.&lt;/P&gt;&lt;P&gt;      APPEND&lt;/P&gt;&lt;P&gt;'----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;-&lt;/P&gt;&lt;HR originaltext="----------" /&gt;&lt;P&gt;' TO ilines.&lt;/P&gt;&lt;P&gt;      APPEND ilines.&lt;/P&gt;&lt;P&gt;      PERFORM buildfootermessage USING 'TEXT'&lt;/P&gt;&lt;P&gt;                                       ilines.&lt;/P&gt;&lt;P&gt;      APPEND ilines.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      PERFORM convertcodetohtml USING ilines[]&lt;/P&gt;&lt;P&gt;                                      htmlpagename&lt;/P&gt;&lt;P&gt;                                      space&lt;/P&gt;&lt;P&gt;                                      is_documentation&lt;/P&gt;&lt;P&gt;                                      true&lt;/P&gt;&lt;P&gt;                                      space&lt;/P&gt;&lt;P&gt;                                      space&lt;/P&gt;&lt;P&gt;                                      space&lt;/P&gt;&lt;P&gt;                                      space&lt;/P&gt;&lt;P&gt;                                      space&lt;/P&gt;&lt;P&gt;                                      space.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM buildfilename USING userfilepath&lt;/P&gt;&lt;P&gt;                                subdir&lt;/P&gt;&lt;P&gt;                                functionname&lt;/P&gt;&lt;P&gt;                                space&lt;/P&gt;&lt;P&gt;                                space&lt;/P&gt;&lt;P&gt;                                fileextension&lt;/P&gt;&lt;P&gt;                                is_documentation&lt;/P&gt;&lt;P&gt;                                newfilenamewithpath&lt;/P&gt;&lt;P&gt;                                newfilenameonly&lt;/P&gt;&lt;P&gt;                                newsubdirectory.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM savefiletopc USING ilines[]&lt;/P&gt;&lt;P&gt;                               newfilenamewithpath&lt;/P&gt;&lt;P&gt;                               newfilenameonly&lt;/P&gt;&lt;P&gt;                               space&lt;/P&gt;&lt;P&gt;                               space.&lt;/P&gt;&lt;P&gt;    documentationdownloaded = true.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "downloadFunctionDocs&lt;/P&gt;&lt;P&gt;"downloadFunctionDocs&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; downloadScreens...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;FORM downloadscreens USING ilocscreenflow LIKE dumiscreen[]&lt;/P&gt;&lt;P&gt;                           value(programname)&lt;/P&gt;&lt;P&gt;                           value(userfilepath)&lt;/P&gt;&lt;P&gt;                           value(textfileextension)&lt;/P&gt;&lt;P&gt;                           value(subdir).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  TABLES: d020t.&lt;/P&gt;&lt;P&gt;  DATA: header LIKE d020s.&lt;/P&gt;&lt;P&gt;  DATA: ifields TYPE STANDARD TABLE OF d021s WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: iflowlogic TYPE STANDARD TABLE OF d022s WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS &amp;lt;wascreen&amp;gt; TYPE tscreenflow.&lt;/P&gt;&lt;P&gt;  DATA: wacharheader TYPE scr_chhead.&lt;/P&gt;&lt;P&gt;  DATA: iscreenchar TYPE STANDARD TABLE OF scr_chfld WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: ifieldschar TYPE STANDARD TABLE OF scr_chfld WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: stars TYPE string VALUE&lt;/P&gt;&lt;P&gt;  '****************************************************************'.&lt;/P&gt;&lt;P&gt;DATA: comment1 TYPE string VALUE '*   This file was generated by Direct&lt;/P&gt;&lt;P&gt;Download Enterprise.&lt;/P&gt;&lt;P&gt;                         *'.&lt;/P&gt;&lt;P&gt;DATA: comment2 TYPE string VALUE '*   Please do not change it manually.&lt;/P&gt;&lt;P&gt;                         *'.&lt;/P&gt;&lt;P&gt;  DATA: dynprotext TYPE string VALUE '%_DYNPRO'.&lt;/P&gt;&lt;P&gt;  DATA: headertext TYPE string VALUE '%_HEADER'.&lt;/P&gt;&lt;P&gt;  DATA: paramstext TYPE string VALUE '%_PARAMS'.&lt;/P&gt;&lt;P&gt;  DATA: descriptiontext TYPE string VALUE '%_DESCRIPTION'.&lt;/P&gt;&lt;P&gt;  DATA: fieldstext TYPE string VALUE '%_FIELDS'.&lt;/P&gt;&lt;P&gt;  DATA: flowlogictext TYPE string VALUE '%_FLOWLOGIC'.&lt;/P&gt;&lt;P&gt;  DATA: programlength TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newsubdirectory TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newfilenamewithpath TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newfilenameonly TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocscreenflow ASSIGNING &amp;lt;wascreen&amp;gt;.&lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'RS_IMPORT_DYNPRO'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        dylang = sy-langu&lt;/P&gt;&lt;P&gt;        dyname = programname&lt;/P&gt;&lt;P&gt;        dynumb = &amp;lt;wascreen&amp;gt;-screen&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        header = header&lt;/P&gt;&lt;P&gt;      TABLES&lt;/P&gt;&lt;P&gt;        ftab   = ifields&lt;/P&gt;&lt;P&gt;        pltab  = iflowlogic.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'RS_SCRP_HEADER_RAW_TO_CHAR'&lt;/P&gt;&lt;P&gt;      EXPORTING&lt;/P&gt;&lt;P&gt;        header_int  = header&lt;/P&gt;&lt;P&gt;      IMPORTING&lt;/P&gt;&lt;P&gt;        header_char = wacharheader&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        OTHERS      = 1.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Add in the top comments for the file&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    APPEND stars TO iscreenchar .&lt;/P&gt;&lt;P&gt;    APPEND comment1 TO iscreenchar.&lt;/P&gt;&lt;P&gt;    APPEND comment2 TO iscreenchar.&lt;/P&gt;&lt;P&gt;    APPEND stars TO iscreenchar.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Screen identification&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    APPEND dynprotext TO iscreenchar.&lt;/P&gt;&lt;P&gt;    APPEND wacharheader-prog TO iscreenchar.&lt;/P&gt;&lt;P&gt;    APPEND wacharheader-dnum TO iscreenchar.&lt;/P&gt;&lt;P&gt;    APPEND sy-saprl TO iscreenchar.&lt;/P&gt;&lt;P&gt;    DESCRIBE FIELD d020t-prog LENGTH programlength IN CHARACTER MODE.&lt;/P&gt;&lt;P&gt;    CONCATENATE `                ` programlength INTO iscreenchar.&lt;/P&gt;&lt;P&gt;    APPEND iscreenchar.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Header&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    APPEND headertext TO iscreenchar.&lt;/P&gt;&lt;P&gt;    APPEND wacharheader TO iscreenchar.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Description text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    APPEND descriptiontext TO iscreenchar.&lt;/P&gt;&lt;P&gt;    SELECT SINGLE dtxt FROM d020t INTO iscreenchar&lt;/P&gt;&lt;P&gt;                       WHERE prog = programname&lt;/P&gt;&lt;P&gt;                             AND dynr = &amp;lt;wascreen&amp;gt;-screen&lt;/P&gt;&lt;P&gt;                             AND lang = sy-langu.&lt;/P&gt;&lt;P&gt;    APPEND iscreenchar.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Fieldlist text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    APPEND fieldstext TO iscreenchar.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    CALL FUNCTION 'RS_SCRP_FIELDS_RAW_TO_CHAR'&lt;/P&gt;&lt;P&gt;      TABLES&lt;/P&gt;&lt;P&gt;        fields_int  = ifields[]&lt;/P&gt;&lt;P&gt;        fields_char = ifieldschar[]&lt;/P&gt;&lt;P&gt;      EXCEPTIONS&lt;/P&gt;&lt;P&gt;        OTHERS      = 1.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    LOOP AT ifieldschar.&lt;/P&gt;&lt;P&gt;      MOVE-CORRESPONDING ifieldschar TO iscreenchar.&lt;/P&gt;&lt;P&gt;      APPEND iscreenchar.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Flowlogic text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    APPEND flowlogictext TO iscreenchar.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Flow logic.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT iflowlogic.&lt;/P&gt;&lt;P&gt;      APPEND iflowlogic TO iscreenchar.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM buildfilename USING userfilepath&lt;/P&gt;&lt;P&gt;                                subdir&lt;/P&gt;&lt;P&gt;                                wacharheader-dnum&lt;/P&gt;&lt;P&gt;                                space&lt;/P&gt;&lt;P&gt;                                space&lt;/P&gt;&lt;P&gt;                                textfileextension&lt;/P&gt;&lt;P&gt;                                is_screen&lt;/P&gt;&lt;P&gt;                                newfilenamewithpath&lt;/P&gt;&lt;P&gt;                                newfilenameonly&lt;/P&gt;&lt;P&gt;                                newsubdirectory.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Save the screen to the local computer&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM savefiletopc USING iscreenchar[]&lt;/P&gt;&lt;P&gt;                               newfilenamewithpath&lt;/P&gt;&lt;P&gt;                               newfilenameonly&lt;/P&gt;&lt;P&gt;                               'X'&lt;/P&gt;&lt;P&gt;                               'X'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    CLEAR header. CLEAR wacharheader.&lt;/P&gt;&lt;P&gt;    CLEAR iscreenchar[].&lt;/P&gt;&lt;P&gt;    CLEAR ifieldschar[].&lt;/P&gt;&lt;P&gt;    CLEAR ifields[].&lt;/P&gt;&lt;P&gt;    CLEAR iflowlogic[].&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "downloadScreens&lt;/P&gt;&lt;P&gt;"downloadScreens&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; downloadGUITitles..&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM downloadguititles USING ilocguititles LIKE dumiguititle[]&lt;/P&gt;&lt;P&gt;                             value(userfilepath)&lt;/P&gt;&lt;P&gt;                             value(textfileextension)&lt;/P&gt;&lt;P&gt;                             value(subdir).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: ilines TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waguititle&amp;gt; TYPE tguititle.&lt;/P&gt;&lt;P&gt;  DATA: newsubdirectory TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newfilenamewithpath TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newfilenameonly TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocguititles ASSIGNING &amp;lt;waguititle&amp;gt;.&lt;/P&gt;&lt;P&gt;    APPEND &amp;lt;waguititle&amp;gt;-text TO ilines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM buildfilename USING userfilepath&lt;/P&gt;&lt;P&gt;                                subdir&lt;/P&gt;&lt;P&gt;                                &amp;lt;waguititle&amp;gt;-obj_code&lt;/P&gt;&lt;P&gt;                                space&lt;/P&gt;&lt;P&gt;                                space&lt;/P&gt;&lt;P&gt;                                textfileextension&lt;/P&gt;&lt;P&gt;                                is_guititle&lt;/P&gt;&lt;P&gt;                                newfilenamewithpath&lt;/P&gt;&lt;P&gt;                                newfilenameonly&lt;/P&gt;&lt;P&gt;                                newsubdirectory.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    PERFORM savefiletopc USING ilines[]&lt;/P&gt;&lt;P&gt;                               newfilenamewithpath&lt;/P&gt;&lt;P&gt;                               newfilenameonly&lt;/P&gt;&lt;P&gt;                               space&lt;/P&gt;&lt;P&gt;                               space.&lt;/P&gt;&lt;P&gt;    CLEAR ilines[].&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "downloadGUITitles&lt;/P&gt;&lt;P&gt;"downloadGUITitles&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; downloadPrograms..&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM downloadprograms USING ilocprogram LIKE iprograms[]&lt;/P&gt;&lt;P&gt;                            ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                            value(userfilepath)&lt;/P&gt;&lt;P&gt;                            value(fileextension)&lt;/P&gt;&lt;P&gt;                            value(htmlfileextension)&lt;/P&gt;&lt;P&gt;                            value(textfileextension)&lt;/P&gt;&lt;P&gt;                            value(converttohtml)&lt;/P&gt;&lt;P&gt;                            value(syntaxhighlightcomments)&lt;/P&gt;&lt;P&gt;                            value(customernamerange)&lt;/P&gt;&lt;P&gt;                            value(getincludes)&lt;/P&gt;&lt;P&gt;                            value(getdictstruct)&lt;/P&gt;&lt;P&gt;                            value(downloaddocumentation)&lt;/P&gt;&lt;P&gt;                            value(sorttablesasc).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: iprogfunctions TYPE STANDARD TABLE OF tfunction WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waprogram&amp;gt; TYPE tprogram.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wainclude&amp;gt; TYPE tinclude.&lt;/P&gt;&lt;P&gt;  DATA: iemptytextelements TYPE STANDARD TABLE OF ttexttable.&lt;/P&gt;&lt;P&gt;  DATA: iemptyselectiontexts TYPE STANDARD TABLE OF ttexttable.&lt;/P&gt;&lt;P&gt;  DATA: iemptymessages TYPE STANDARD TABLE OF tmessage.&lt;/P&gt;&lt;P&gt;  DATA: iemptyguititles TYPE STANDARD TABLE OF tguititle.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SORT ilocprogram ASCENDING BY progname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocprogram ASSIGNING &amp;lt;waprogram&amp;gt;.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download the main program&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM readincludeanddownload USING &amp;lt;waprogram&amp;gt;-itextelements[]&lt;/P&gt;&lt;P&gt;                                         &amp;lt;waprogram&amp;gt;-iselectiontexts[]&lt;/P&gt;&lt;P&gt;                                         &amp;lt;waprogram&amp;gt;-imessages[]&lt;/P&gt;&lt;P&gt;                                         &amp;lt;waprogram&amp;gt;-iguititle[]&lt;/P&gt;&lt;P&gt;                                         &amp;lt;waprogram&amp;gt;-progname&lt;/P&gt;&lt;P&gt;                                         space&lt;/P&gt;&lt;P&gt;                                         &amp;lt;waprogram&amp;gt;-programtitle&lt;/P&gt;&lt;P&gt;                                         is_program&lt;/P&gt;&lt;P&gt;                                         userfilepath&lt;/P&gt;&lt;P&gt;                                         fileextension&lt;/P&gt;&lt;P&gt;                                         &amp;lt;waprogram&amp;gt;-progname&lt;/P&gt;&lt;P&gt;                                         converttohtml&lt;/P&gt;&lt;P&gt;                                         syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                         customernamerange&lt;/P&gt;&lt;P&gt;                                         getincludes&lt;/P&gt;&lt;P&gt;                                         getdictstruct.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download screens.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT &amp;lt;waprogram&amp;gt;-iscreenflow[] IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM downloadscreens USING &amp;lt;waprogram&amp;gt;-iscreenflow[]&lt;/P&gt;&lt;P&gt;                                    &amp;lt;waprogram&amp;gt;-progname&lt;/P&gt;&lt;P&gt;                                    userfilepath&lt;/P&gt;&lt;P&gt;                                    textfileextension&lt;/P&gt;&lt;P&gt;                                    &amp;lt;waprogram&amp;gt;-progname.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download GUI titles&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT &amp;lt;waprogram&amp;gt;-iguititle[] IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM downloadguititles USING &amp;lt;waprogram&amp;gt;-iguititle&lt;/P&gt;&lt;P&gt;                                      userfilepath&lt;/P&gt;&lt;P&gt;                                      textfileextension&lt;/P&gt;&lt;P&gt;                                      &amp;lt;waprogram&amp;gt;-progname.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download all other includes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;waprogram&amp;gt;-iincludes ASSIGNING &amp;lt;wainclude&amp;gt;.&lt;/P&gt;&lt;P&gt;      PERFORM readincludeanddownload USING iemptytextelements[]&lt;/P&gt;&lt;P&gt;                                           iemptyselectiontexts[]&lt;/P&gt;&lt;P&gt;                                           iemptymessages[]&lt;/P&gt;&lt;P&gt;                                           iemptyguititles[]&lt;/P&gt;&lt;P&gt;                                           &amp;lt;wainclude&amp;gt;-includename&lt;/P&gt;&lt;P&gt;                                           space&lt;/P&gt;&lt;P&gt;                                           &amp;lt;wainclude&amp;gt;-includetitle&lt;/P&gt;&lt;P&gt;                                           is_program&lt;/P&gt;&lt;P&gt;                                           userfilepath&lt;/P&gt;&lt;P&gt;                                           fileextension&lt;/P&gt;&lt;P&gt;                                           &amp;lt;waprogram&amp;gt;-progname&lt;/P&gt;&lt;P&gt;                                           converttohtml&lt;/P&gt;&lt;P&gt;                                           syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                           customernamerange&lt;/P&gt;&lt;P&gt;                                           getincludes&lt;/P&gt;&lt;P&gt;                                           getdictstruct.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download all dictionary structures&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT &amp;lt;waprogram&amp;gt;-idictstruct[] IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM downloadddstructures USING &amp;lt;waprogram&amp;gt;-idictstruct[]&lt;/P&gt;&lt;P&gt;                                         userfilepath&lt;/P&gt;&lt;P&gt;                                         htmlfileextension&lt;/P&gt;&lt;P&gt;                                         &amp;lt;waprogram&amp;gt;-progname&lt;/P&gt;&lt;P&gt;                                         sorttablesasc.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download any functions used by these programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT ilocfunctions INTO iprogfunctions WHERE programlinkname =&lt;/P&gt;&lt;P&gt;&amp;lt;waprogram&amp;gt;-progname.&lt;/P&gt;&lt;P&gt;      APPEND iprogfunctions.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF NOT iprogfunctions[] IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM downloadfunctions USING iprogfunctions[]&lt;/P&gt;&lt;P&gt;                                      userfilepath&lt;/P&gt;&lt;P&gt;                                      fileextension&lt;/P&gt;&lt;P&gt;                                      &amp;lt;waprogram&amp;gt;-progname&lt;/P&gt;&lt;P&gt;                                      downloaddocumentation&lt;/P&gt;&lt;P&gt;                                      converttohtml&lt;/P&gt;&lt;P&gt;                                      syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                      customernamerange&lt;/P&gt;&lt;P&gt;                                      getincludes&lt;/P&gt;&lt;P&gt;                                      getdictstruct&lt;/P&gt;&lt;P&gt;                                      textfileextension&lt;/P&gt;&lt;P&gt;                                      htmlfileextension&lt;/P&gt;&lt;P&gt;                                      sorttablesasc .&lt;/P&gt;&lt;P&gt;      CLEAR iprogfunctions[].&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "downloadPrograms&lt;/P&gt;&lt;P&gt;"downloadPrograms&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; downloadClasses..&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM downloadclasses USING ilocclasses LIKE iclasses[]&lt;/P&gt;&lt;P&gt;                           ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                           value(userfilepath)&lt;/P&gt;&lt;P&gt;                           value(fileextension)&lt;/P&gt;&lt;P&gt;                           value(htmlfileextension)&lt;/P&gt;&lt;P&gt;                           value(textfileextension)&lt;/P&gt;&lt;P&gt;                           value(converttohtml)&lt;/P&gt;&lt;P&gt;                           value(syntaxhighlightcomments)&lt;/P&gt;&lt;P&gt;                           value(customernamerange)&lt;/P&gt;&lt;P&gt;                           value(getincludes)&lt;/P&gt;&lt;P&gt;                           value(getdictstruct)&lt;/P&gt;&lt;P&gt;                           value(downloaddocumentation)&lt;/P&gt;&lt;P&gt;                           value(sorttablesasc).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: iclassfunctions TYPE STANDARD TABLE OF tfunction WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waclass&amp;gt; TYPE tclass.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wamethod&amp;gt; TYPE tmethod.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SORT ilocclasses ASCENDING BY clsname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocclasses ASSIGNING &amp;lt;waclass&amp;gt;.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download the class&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    PERFORM readclassanddownload USING &amp;lt;waclass&amp;gt;&lt;/P&gt;&lt;P&gt;                                        &amp;lt;waclass&amp;gt;-clsname&lt;/P&gt;&lt;P&gt;                                        space&lt;/P&gt;&lt;P&gt;                                        is_class&lt;/P&gt;&lt;P&gt;                                        userfilepath&lt;/P&gt;&lt;P&gt;                                        fileextension&lt;/P&gt;&lt;P&gt;                                        space&lt;/P&gt;&lt;P&gt;                                        converttohtml&lt;/P&gt;&lt;P&gt;                                        syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                        customernamerange&lt;/P&gt;&lt;P&gt;                                        getincludes&lt;/P&gt;&lt;P&gt;                                        getdictstruct.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download all of the methods&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;waclass&amp;gt;-imethods ASSIGNING &amp;lt;wamethod&amp;gt;.&lt;/P&gt;&lt;P&gt;      PERFORM readmethodanddownload USING &amp;lt;wamethod&amp;gt;&lt;/P&gt;&lt;P&gt;                                          &amp;lt;wamethod&amp;gt;-cmpname&lt;/P&gt;&lt;P&gt;                                          &amp;lt;wamethod&amp;gt;-methodkey&lt;/P&gt;&lt;P&gt;                                          space&lt;/P&gt;&lt;P&gt;                                          is_method&lt;/P&gt;&lt;P&gt;                                          userfilepath&lt;/P&gt;&lt;P&gt;                                          fileextension&lt;/P&gt;&lt;P&gt;                                          &amp;lt;waclass&amp;gt;-clsname&lt;/P&gt;&lt;P&gt;                                          converttohtml&lt;/P&gt;&lt;P&gt;                                          syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                          customernamerange&lt;/P&gt;&lt;P&gt;                                          getincludes&lt;/P&gt;&lt;P&gt;                                          getdictstruct.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download all dictionary structures&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT &amp;lt;waclass&amp;gt;-idictstruct[] IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM downloadddstructures USING &amp;lt;waclass&amp;gt;-idictstruct[]&lt;/P&gt;&lt;P&gt;                                         userfilepath&lt;/P&gt;&lt;P&gt;                                         htmlfileextension&lt;/P&gt;&lt;P&gt;                                         &amp;lt;waclass&amp;gt;-clsname&lt;/P&gt;&lt;P&gt;                                         sorttablesasc.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Download any functions used by these programs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT ilocfunctions INTO iclassfunctions WHERE programlinkname =&lt;/P&gt;&lt;P&gt;&amp;lt;waclass&amp;gt;-clsname.&lt;/P&gt;&lt;P&gt;      APPEND iclassfunctions.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF NOT iclassfunctions[] IS INITIAL.&lt;/P&gt;&lt;P&gt;      PERFORM downloadfunctions USING iclassfunctions[]&lt;/P&gt;&lt;P&gt;                                      userfilepath&lt;/P&gt;&lt;P&gt;                                      fileextension&lt;/P&gt;&lt;P&gt;                                      &amp;lt;waclass&amp;gt;-clsname&lt;/P&gt;&lt;P&gt;                                      downloaddocumentation&lt;/P&gt;&lt;P&gt;                                      converttohtml&lt;/P&gt;&lt;P&gt;                                      syntaxhighlightcomments&lt;/P&gt;&lt;P&gt;                                      customernamerange&lt;/P&gt;&lt;P&gt;                                      getincludes&lt;/P&gt;&lt;P&gt;                                      getdictstruct&lt;/P&gt;&lt;P&gt;                                      textfileextension&lt;/P&gt;&lt;P&gt;                                      htmlfileextension&lt;/P&gt;&lt;P&gt;                                      sorttablesasc .&lt;/P&gt;&lt;P&gt;      CLEAR iclassfunctions[].&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "downloadClasses&lt;/P&gt;&lt;P&gt;"downloadClasses&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; reFormatClassCode...   Expand a classes public, private and protected&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;section from the 72 characters&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                        that the class builder sets it to back to the&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*wide editor mode&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;FORM reformatclasscode USING itemplines LIKE dumihtml[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waline&amp;gt; TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: newline TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: inewtable TYPE STANDARD TABLE OF string.&lt;/P&gt;&lt;P&gt;  DATA: foundone TYPE i VALUE false.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT itemplines ASSIGNING &amp;lt;waline&amp;gt;.&lt;/P&gt;&lt;P&gt;    IF NOT &amp;lt;waline&amp;gt; IS INITIAL.&lt;/P&gt;&lt;P&gt;      IF foundone = false.&lt;/P&gt;&lt;P&gt;        FIND 'data' IN &amp;lt;waline&amp;gt; RESPECTING CASE.&lt;/P&gt;&lt;P&gt;        IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;          foundone = true.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        FIND 'constants' IN &amp;lt;waline&amp;gt; RESPECTING CASE.&lt;/P&gt;&lt;P&gt;        IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;          foundone = true.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        IF foundone = true.&lt;/P&gt;&lt;P&gt;          newline = &amp;lt;waline&amp;gt;.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          IF ( newline CS '.'&lt;/P&gt;&lt;P&gt;                              OR newline CS '*' ).&lt;/P&gt;&lt;P&gt;            REPLACE '!' IN &amp;lt;waline&amp;gt; WITH ''.&lt;/P&gt;&lt;P&gt;            APPEND newline TO inewtable.&lt;/P&gt;&lt;P&gt;            CLEAR newline.&lt;/P&gt;&lt;P&gt;            foundone = false.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ELSE.&lt;/P&gt;&lt;P&gt;          REPLACE '!' IN &amp;lt;waline&amp;gt; WITH ''.&lt;/P&gt;&lt;P&gt;          APPEND &amp;lt;waline&amp;gt; TO inewtable.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        CONCATENATE newline &amp;lt;waline&amp;gt; INTO newline SEPARATED BY space.&lt;/P&gt;&lt;P&gt;        IF ( newline CS '.'&lt;/P&gt;&lt;P&gt;                            OR newline CS '*' ).&lt;/P&gt;&lt;P&gt;          APPEND newline TO inewtable.&lt;/P&gt;&lt;P&gt;          CLEAR newline.&lt;/P&gt;&lt;P&gt;          foundone = false.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      REPLACE '!' IN &amp;lt;waline&amp;gt; WITH ''.&lt;/P&gt;&lt;P&gt;      APPEND &amp;lt;waline&amp;gt; TO inewtable[].&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  itemplines[] = inewtable[].&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"reFormatClassCode&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;********************************&lt;/P&gt;&lt;P&gt;**************************************HTML&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;ROUTINES*****************************************************&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;********************************&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; convertDDToHTML...   Convert text description to HTML&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;FORM convertddtohtml USING ilocdictstructure LIKE dumidictstructure[]&lt;/P&gt;&lt;P&gt;                           ilochtml LIKE dumihtml[]&lt;/P&gt;&lt;P&gt;                           value(tablename)&lt;/P&gt;&lt;P&gt;                           value(tabletitle)&lt;/P&gt;&lt;P&gt;                           value(sorttablesasc).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: icolumncaptions TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: wadictionary TYPE tdicttablestructure.&lt;/P&gt;&lt;P&gt;  DATA: wahtml TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: title TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM buildcolumnheaders USING icolumncaptions[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Add a html header to the table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CONCATENATE 'Dictionary object-' tablename INTO title SEPARATED BY&lt;/P&gt;&lt;P&gt;space.&lt;/P&gt;&lt;P&gt;  PERFORM addhtmlheader USING ilochtml[]&lt;/P&gt;&lt;P&gt;                              title.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE '&amp;lt;h2&amp;gt;' tablename '&amp;lt;/h2&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;  APPEND wahtml TO ilochtml.&lt;/P&gt;&lt;P&gt;  APPEND '' TO ilochtml.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE '&amp;lt;h3&amp;gt;' tabletitle '&amp;lt;/h3&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;  APPEND wahtml TO ilochtml.&lt;/P&gt;&lt;P&gt;  APPEND '' TO ilochtml.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Do we need to sort the fields into alphabetical order&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  IF NOT sorttablesasc IS INITIAL.&lt;/P&gt;&lt;P&gt;    SORT ilocdictstructure ASCENDING BY fieldname.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM convertitabtohtml USING icolumncaptions[]&lt;/P&gt;&lt;P&gt;                                  ilocdictstructure[]&lt;/P&gt;&lt;P&gt;                                  ilochtml&lt;/P&gt;&lt;P&gt;                                  'X'&lt;/P&gt;&lt;P&gt;                                  colour_black&lt;/P&gt;&lt;P&gt;                                  ''&lt;/P&gt;&lt;P&gt;                                  colour_yellow&lt;/P&gt;&lt;P&gt;                                  ''&lt;/P&gt;&lt;P&gt;                                  background_colour&lt;/P&gt;&lt;P&gt;                                  'Arial'&lt;/P&gt;&lt;P&gt;                                  'green'&lt;/P&gt;&lt;P&gt;                                  '1'&lt;/P&gt;&lt;P&gt;                                  '1'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Add a html footer to the table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  APPEND '&amp;lt;br&amp;gt;' TO ilochtml.&lt;/P&gt;&lt;P&gt;  PERFORM addhtmlfooter USING ilochtml[].&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"convertDDToHTML&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; convertITABtoHtml... produces a html table from an internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;FORM convertitabtohtml USING ilocheader LIKE dumiheader[]&lt;/P&gt;&lt;P&gt;                             ilocdictstructure LIKE dumidictstructure[]&lt;/P&gt;&lt;P&gt;                             ilochtml LIKE dumihtml[]&lt;/P&gt;&lt;P&gt;                             value(includerowcount)&lt;/P&gt;&lt;P&gt;                             headingbackcolour&lt;/P&gt;&lt;P&gt;                             headingfontname&lt;/P&gt;&lt;P&gt;                             headingfontcolour&lt;/P&gt;&lt;P&gt;                             headingfontsize&lt;/P&gt;&lt;P&gt;                             bodybackcolour&lt;/P&gt;&lt;P&gt;                             bodyfontname&lt;/P&gt;&lt;P&gt;                             bodyfontcolour&lt;/P&gt;&lt;P&gt;                             bodyfontsize&lt;/P&gt;&lt;P&gt;                             bordersize.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Holds one cell from the internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;fsfield&amp;gt;.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;The value of one cell form the internal table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: wtextcell TYPE string.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;work area for putting the CSV value into&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: wacsvtable TYPE string.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Have we used any font tags in the html code&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: usedafontattribute TYPE i VALUE 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Work area for HTML table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: wahtml TYPE string.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Loop counter for adding row numbers onto the output table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  DATA: loopcounter TYPE string.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Work area for header table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waheader&amp;gt; TYPE string.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;ilocdictstructure&amp;gt; TYPE tdicttablestructure.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE '&amp;lt;table border="' bordersize '"&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;  APPEND wahtml TO ilochtml.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT ilocheader[] IS INITIAL.&lt;/P&gt;&lt;P&gt;    APPEND '&amp;lt;tr&amp;gt;' TO ilochtml.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocheader ASSIGNING &amp;lt;waheader&amp;gt;.&lt;/P&gt;&lt;P&gt;    IF headingbackcolour IS INITIAL.&lt;/P&gt;&lt;P&gt;      wahtml = '&amp;lt;th&amp;gt;'.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      CONCATENATE '&amp;lt;th bgcolor="' headingbackcolour '"&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF NOT headingfontname IS INITIAL OR NOT headingfontcolour IS&lt;/P&gt;&lt;P&gt;    INITIAL OR NOT headingfontsize IS INITIAL.&lt;/P&gt;&lt;P&gt;      CONCATENATE wahtml '&amp;lt;font' INTO wahtml.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     Add the font name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IF NOT headingfontname IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE wahtml ' face ="' INTO wahtml.&lt;/P&gt;&lt;P&gt;        CONCATENATE wahtml headingfontname '"' INTO wahtml.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     Add the font colour&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IF NOT headingfontcolour IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE wahtml ' color ="' INTO wahtml.&lt;/P&gt;&lt;P&gt;        CONCATENATE wahtml headingfontcolour '"' INTO wahtml.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;     Add the fontsize&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IF NOT headingfontsize IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE wahtml' size ="' INTO wahtml.&lt;/P&gt;&lt;P&gt;        CONCATENATE wahtml  headingfontsize '"' INTO wahtml.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      CONCATENATE wahtml '&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;      usedafontattribute = true.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Add the caption name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    CONCATENATE wahtml &amp;lt;waheader&amp;gt; INTO wahtml.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF usedafontattribute = true.&lt;/P&gt;&lt;P&gt;      CONCATENATE wahtml '&amp;lt;/font&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;      usedafontattribute = false.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    CONCATENATE wahtml '&amp;lt;/th&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;    APPEND wahtml TO ilochtml.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  APPEND '&amp;lt;/tr&amp;gt;' TO ilochtml.&lt;/P&gt;&lt;P&gt;  FREE ilocheader.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; Line item data&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT ilocdictstructure ASSIGNING &amp;lt;ilocdictstructure&amp;gt;.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    loopcounter = sy-tabix.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND '' TO ilochtml.&lt;/P&gt;&lt;P&gt;    APPEND '&amp;lt;tr&amp;gt;' TO ilochtml.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Add the row count&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT includerowcount IS INITIAL.&lt;/P&gt;&lt;P&gt;      IF bodybackcolour IS INITIAL.&lt;/P&gt;&lt;P&gt;        wahtml = '&amp;lt;td&amp;gt;'.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        CONCATENATE '&amp;lt;td bgcolor="' bodybackcolour '"&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF NOT bodyfontname IS INITIAL OR NOT bodyfontcolour IS INITIAL OR&lt;/P&gt;&lt;P&gt;      NOT bodyfontsize IS INITIAL.&lt;/P&gt;&lt;P&gt;        CONCATENATE wahtml '&amp;lt;font' INTO wahtml.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       Add the font name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF NOT bodyfontname IS INITIAL.&lt;/P&gt;&lt;P&gt;          CONCATENATE wahtml ' face ="' INTO wahtml.&lt;/P&gt;&lt;P&gt;          CONCATENATE wahtml bodyfontname '"' INTO wahtml.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       Add the font colour&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF NOT bodyfontcolour IS INITIAL.&lt;/P&gt;&lt;P&gt;          CONCATENATE wahtml ' color ="' INTO wahtml.&lt;/P&gt;&lt;P&gt;          CONCATENATE wahtml bodyfontcolour '"' INTO wahtml.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;       Add the fontsize&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF NOT bodyfontsize IS INITIAL.&lt;/P&gt;&lt;P&gt;          CONCATENATE wahtml ' size ="' INTO wahtml.&lt;/P&gt;&lt;P&gt;          CONCATENATE wahtml bodyfontsize '"' INTO wahtml.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE wahtml '&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;        usedafontattribute = true.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Add the row number into the table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      CONCATENATE wahtml loopcounter INTO wahtml.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF usedafontattribute = true.&lt;/P&gt;&lt;P&gt;        CONCATENATE wahtml '&amp;lt;/font&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;        usedafontattribute = false.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      CONCATENATE wahtml '&amp;lt;/td&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;      APPEND wahtml TO ilochtml.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    DO.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Assign each field in the table to the field symbol&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      ASSIGN COMPONENT sy-index OF STRUCTURE &amp;lt;ilocdictstructure&amp;gt; TO&lt;/P&gt;&lt;P&gt;      &amp;lt;fsfield&amp;gt;.&lt;/P&gt;&lt;P&gt;      IF sy-subrc = 0.&lt;/P&gt;&lt;P&gt;        MOVE &amp;lt;fsfield&amp;gt; TO wtextcell.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Cell data processing&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF bodybackcolour IS INITIAL.&lt;/P&gt;&lt;P&gt;          wahtml = '&amp;lt;td&amp;gt;'.&lt;/P&gt;&lt;P&gt;        ELSE.&lt;/P&gt;&lt;P&gt;          CONCATENATE '&amp;lt;td bgcolor="' bodybackcolour '"&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        IF NOT bodyfontname IS INITIAL OR NOT bodyfontcolour IS INITIAL&lt;/P&gt;&lt;P&gt;        OR NOT bodyfontsize IS INITIAL.&lt;/P&gt;&lt;P&gt;          CONCATENATE wahtml '&amp;lt;font' INTO wahtml.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;         Add the font name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          IF NOT bodyfontname IS INITIAL.&lt;/P&gt;&lt;P&gt;            CONCATENATE wahtml ' face ="' INTO wahtml.&lt;/P&gt;&lt;P&gt;            CONCATENATE wahtml bodyfontname '"' INTO wahtml.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;         Add the font colour&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          IF NOT bodyfontcolour IS INITIAL.&lt;/P&gt;&lt;P&gt;            CONCATENATE wahtml ' color ="' INTO wahtml.&lt;/P&gt;&lt;P&gt;            CONCATENATE wahtml bodyfontcolour '"' INTO wahtml.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;         Add the fontsize&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          IF NOT bodyfontsize IS INITIAL.&lt;/P&gt;&lt;P&gt;            CONCATENATE wahtml ' size ="' INTO wahtml.&lt;/P&gt;&lt;P&gt;            CONCATENATE wahtml bodyfontsize '"' INTO wahtml.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          CONCATENATE wahtml '&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;          usedafontattribute = true.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Add the caption name&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF wtextcell IS INITIAL.&lt;/P&gt;&lt;P&gt;          CONCATENATE wahtml ' ' INTO wahtml.&lt;/P&gt;&lt;P&gt;        ELSE.&lt;/P&gt;&lt;P&gt;          CONCATENATE wahtml wtextcell INTO wahtml.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        IF usedafontattribute = true.&lt;/P&gt;&lt;P&gt;          CONCATENATE wahtml '&amp;lt;/font&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;          usedafontattribute = false.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        CONCATENATE wahtml '&amp;lt;/td&amp;gt;' INTO wahtml.&lt;/P&gt;&lt;P&gt;        APPEND wahtml TO ilochtml.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        EXIT.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDDO.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND '&amp;lt;/tr&amp;gt;' TO ilochtml.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  APPEND '&amp;lt;/table&amp;gt;' TO ilochtml.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"convertITABtoHtml&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; convertCodeToHtml... Builds an HTML table based upon a text table.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;FORM convertcodetohtml USING icontents LIKE dumihtml[]&lt;/P&gt;&lt;P&gt;                             value(programname)&lt;/P&gt;&lt;P&gt;                             value(shortdescription)&lt;/P&gt;&lt;P&gt;                             value(sourcecodetype)&lt;/P&gt;&lt;P&gt;                             value(functiondocumentationexists)&lt;/P&gt;&lt;P&gt;                             value(ismainfunctioninclude)&lt;/P&gt;&lt;P&gt;                             value(syntaxhighlightcomments)&lt;/P&gt;&lt;P&gt;                             value(htmlextension)&lt;/P&gt;&lt;P&gt;                             value(customernamerange)&lt;/P&gt;&lt;P&gt;                             value(getincludes)&lt;/P&gt;&lt;P&gt;                             value(getdictstructures).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: htmltable TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: listingname TYPE string VALUE 'Code listing for:'.&lt;/P&gt;&lt;P&gt;  DATA: descriptionname TYPE string VALUE `Description: `.&lt;/P&gt;&lt;P&gt;  DATA: head(255).&lt;/P&gt;&lt;P&gt;  DATA: tail(255).&lt;/P&gt;&lt;P&gt;  DATA: mytabix TYPE sytabix.&lt;/P&gt;&lt;P&gt;  DATA: nextline TYPE sytabix.&lt;/P&gt;&lt;P&gt;  DATA: hyperlinkname TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: copyofcurrentline TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: currentlinelength TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  DATA: copylinelength TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  DATA: ignorefuturelines TYPE i VALUE false.&lt;/P&gt;&lt;P&gt;  DATA: foundasterix TYPE i VALUE false.&lt;/P&gt;&lt;P&gt;  DATA: lowercaselink TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: wanextline TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: wacontent(255).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Add a html header to the table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM addhtmlheader USING htmltable[]&lt;/P&gt;&lt;P&gt;                              programname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE listingname programname INTO listingname SEPARATED BY&lt;/P&gt;&lt;P&gt;  space.&lt;/P&gt;&lt;P&gt;  CONCATENATE '&amp;lt;font size="3" face = "Arial" color="' colour_black&lt;/P&gt;&lt;P&gt;  '"&amp;gt;&amp;lt;b&amp;gt;' listingname '&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;' INTO htmltable.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT shortdescription IS INITIAL.&lt;/P&gt;&lt;P&gt;    APPEND '&amp;lt;br&amp;gt;' TO htmltable.&lt;/P&gt;&lt;P&gt;    CONCATENATE descriptionname shortdescription INTO descriptionname&lt;/P&gt;&lt;P&gt;    SEPARATED BY space.&lt;/P&gt;&lt;P&gt;    CONCATENATE '&amp;lt;font size="3" face = "Arial" color="' colour_black&lt;/P&gt;&lt;P&gt;    '"&amp;gt;&amp;lt;b&amp;gt;' descriptionname '&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;' INTO htmltable.&lt;/P&gt;&lt;P&gt;    APPEND htmltable.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  htmltable = '&amp;lt;hr&amp;gt;'.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  htmltable = '&amp;lt;pre width="100"&amp;gt;'.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT icontents INTO wacontent.&lt;/P&gt;&lt;P&gt;    mytabix = sy-tabix.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    IF NOT ( icontents IS INITIAL ).&lt;/P&gt;&lt;P&gt;      WHILE ( wacontent CS '&amp;lt;' OR wacontent CS '&amp;gt;' ).&lt;/P&gt;&lt;P&gt;        REPLACE '&amp;lt;' IN wacontent WITH lt.&lt;/P&gt;&lt;P&gt;        REPLACE '&amp;gt;' IN wacontent WITH gt.&lt;/P&gt;&lt;P&gt;      ENDWHILE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF wacontent+0(1) &amp;lt;&amp;gt; asterix.&lt;/P&gt;&lt;P&gt;        currentlinelength = STRLEN( wacontent ).&lt;/P&gt;&lt;P&gt;        copyofcurrentline = wacontent.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Don't hyperlink anything for files of type documentation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF sourcecodetype &amp;lt;&amp;gt; is_documentation.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Check for any functions to highlight&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          IF ( wacontent CS callfunction ) AND ( wacontent &amp;lt;&amp;gt;&lt;/P&gt;&lt;P&gt;          'DESTINATION' ).&lt;/P&gt;&lt;P&gt;            nextline = mytabix + 1.&lt;/P&gt;&lt;P&gt;            READ TABLE icontents INTO wanextline INDEX nextline.&lt;/P&gt;&lt;P&gt;            TRANSLATE wanextline TO UPPER CASE.&lt;/P&gt;&lt;P&gt;            IF wanextline NS 'DESTINATION'.&lt;/P&gt;&lt;P&gt;              SHIFT copyofcurrentline LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              copylinelength = STRLEN( copyofcurrentline ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              SPLIT copyofcurrentline AT space INTO head tail.&lt;/P&gt;&lt;P&gt;              SPLIT tail AT space INTO head tail.&lt;/P&gt;&lt;P&gt;              SPLIT tail AT space INTO head tail.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;            Function name is now in head&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              TRANSLATE head USING ''' '.&lt;/P&gt;&lt;P&gt;              SHIFT head LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              TRY.&lt;/P&gt;&lt;P&gt;                  IF head&lt;EM&gt;0(1) = 'Y' OR head&lt;/EM&gt;0(1) = 'Z' OR head+0(1) = 'y'&lt;/P&gt;&lt;P&gt;                  OR head+0(1) = 'z' OR head CS customernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                Definately a customer function module&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                    hyperlinkname = head.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                    IF sourcecodetype = is_function.&lt;/P&gt;&lt;P&gt;                      copyofcurrentline = 'call function &amp;lt;a href ="../'.&lt;/P&gt;&lt;P&gt;                    ELSE.&lt;/P&gt;&lt;P&gt;                      copyofcurrentline = 'call function &amp;lt;a href ="'.&lt;/P&gt;&lt;P&gt;                    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                    lowercaselink = hyperlinkname.&lt;/P&gt;&lt;P&gt;                    TRANSLATE lowercaselink TO LOWER CASE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                If we are running on a non UNIX environment we will&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*need to remove forward slashes&lt;/P&gt;&lt;P&gt;                    IF frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;                      TRANSLATE lowercaselink USING '/_'.&lt;/P&gt;&lt;P&gt;                    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                    CONCATENATE copyofcurrentline&lt;/P&gt;&lt;P&gt;                                lowercaselink     "hyperlinkName&lt;/P&gt;&lt;P&gt;                                '/'&lt;/P&gt;&lt;P&gt;                                lowercaselink     "hyperlinkName&lt;/P&gt;&lt;P&gt;                                period htmlextension '"&amp;gt;'&lt;/P&gt;&lt;P&gt;                                ''''&lt;/P&gt;&lt;P&gt;                                hyperlinkname&lt;/P&gt;&lt;P&gt;                                ''''&lt;/P&gt;&lt;P&gt;                                '&amp;lt;/a&amp;gt;'&lt;/P&gt;&lt;P&gt;                                tail INTO copyofcurrentline.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                Pad the string back out with spaces&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                    WHILE copylinelength &amp;lt; currentlinelength.&lt;/P&gt;&lt;P&gt;                      SHIFT copyofcurrentline RIGHT BY 1 PLACES.&lt;/P&gt;&lt;P&gt;                      copylinelength = copylinelength + 1.&lt;/P&gt;&lt;P&gt;                    ENDWHILE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                    wacontent = copyofcurrentline.&lt;/P&gt;&lt;P&gt;                  ENDIF.&lt;/P&gt;&lt;P&gt;                CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;              ENDTRY.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Check for any customer includes to hyperlink&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF wacontent CS include OR wacontent CS lowinclude.&lt;/P&gt;&lt;P&gt;          SHIFT copyofcurrentline LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;          copylinelength = STRLEN( copyofcurrentline ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          SPLIT copyofcurrentline AT space INTO head tail.&lt;/P&gt;&lt;P&gt;          SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          TRY.&lt;/P&gt;&lt;P&gt;              IF ( tail&lt;EM&gt;0(1) = 'Y' OR tail&lt;/EM&gt;0(1) = 'Z' OR tail+0(1) = 'y'&lt;/P&gt;&lt;P&gt;  OR tail&lt;EM&gt;0(1) = 'z' OR tail CS customernamerange OR tail&lt;/EM&gt;0(2) = 'mz' OR&lt;/P&gt;&lt;P&gt;              tail+0(2) = 'MZ' )&lt;/P&gt;&lt;P&gt;                  AND NOT getincludes IS INITIAL AND  tail NS structure&lt;/P&gt;&lt;P&gt;              AND tail NS lowstructure.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;            Hyperlink for program includes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                CLEAR wacontent.&lt;/P&gt;&lt;P&gt;                SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;                SPLIT tail AT period INTO hyperlinkname tail.&lt;/P&gt;&lt;P&gt;                copyofcurrentline = 'include &amp;lt;a href ="'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                lowercaselink = hyperlinkname.&lt;/P&gt;&lt;P&gt;                TRANSLATE lowercaselink TO LOWER CASE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;            If we are running on a non UNIX environment we will need&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*to remove forward slashes&lt;/P&gt;&lt;P&gt;                IF frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;                  TRANSLATE lowercaselink USING '/_'.&lt;/P&gt;&lt;P&gt;                ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                CONCATENATE copyofcurrentline&lt;/P&gt;&lt;P&gt;                            lowercaselink       "hyperlinkName&lt;/P&gt;&lt;P&gt;                            period htmlextension '"&amp;gt;'&lt;/P&gt;&lt;P&gt;                            hyperlinkname&lt;/P&gt;&lt;P&gt;                            '&amp;lt;/a&amp;gt;'&lt;/P&gt;&lt;P&gt;                            period tail INTO copyofcurrentline.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;            Pad the string back out with spaces&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                WHILE copylinelength &amp;lt; currentlinelength.&lt;/P&gt;&lt;P&gt;                  SHIFT copyofcurrentline RIGHT BY 1 PLACES.&lt;/P&gt;&lt;P&gt;                  copylinelength = copylinelength + 1.&lt;/P&gt;&lt;P&gt;                ENDWHILE.&lt;/P&gt;&lt;P&gt;                wacontent = copyofcurrentline.&lt;/P&gt;&lt;P&gt;              ELSE.&lt;/P&gt;&lt;P&gt;                IF NOT getdictstructures IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;             Hyperlink for structure include e.g. "include structure&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*zfred."&lt;/P&gt;&lt;P&gt;                  copylinelength = STRLEN( copyofcurrentline ).&lt;/P&gt;&lt;P&gt;                  SPLIT copyofcurrentline AT space INTO head tail.&lt;/P&gt;&lt;P&gt;                  SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;                  SPLIT tail AT space INTO head tail.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                  TRY.&lt;/P&gt;&lt;P&gt;                      IF tail&lt;EM&gt;0(1) = 'Y' OR tail&lt;/EM&gt;0(1) = 'Z' OR tail+0(1) =&lt;/P&gt;&lt;P&gt;                      'y' OR tail+0(1) = 'z' OR tail CS customernamerange.&lt;/P&gt;&lt;P&gt;                        CLEAR wacontent.&lt;/P&gt;&lt;P&gt;                        SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;                        SPLIT tail AT period INTO hyperlinkname tail.&lt;/P&gt;&lt;P&gt;                        copyofcurrentline = 'include structure &amp;lt;a href ='.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                        lowercaselink = hyperlinkname.&lt;/P&gt;&lt;P&gt;                        TRANSLATE lowercaselink TO LOWER CASE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                 If we are running on a non UNIX environment we will&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*need to remove forward slashes&lt;/P&gt;&lt;P&gt;                        IF frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;                          TRANSLATE lowercaselink USING '/_'.&lt;/P&gt;&lt;P&gt;                        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                        CONCATENATE copyofcurrentline&lt;/P&gt;&lt;P&gt;                                    '"'&lt;/P&gt;&lt;P&gt;                                    lowercaselink    "hyperlinkName&lt;/P&gt;&lt;P&gt;                                    '/'&lt;/P&gt;&lt;P&gt;                                    'dictionary-'&lt;/P&gt;&lt;P&gt;                                    lowercaselink    "hyperlinkName&lt;/P&gt;&lt;P&gt;                                    period htmlextension&lt;/P&gt;&lt;P&gt;                                    '"&amp;gt;'&lt;/P&gt;&lt;P&gt;                                    hyperlinkname&lt;/P&gt;&lt;P&gt;                                    '&amp;lt;/a&amp;gt;'&lt;/P&gt;&lt;P&gt;                                    period tail INTO copyofcurrentline.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                 Pad the string back out with spaces&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                        WHILE copylinelength &amp;lt; currentlinelength.&lt;/P&gt;&lt;P&gt;                          SHIFT copyofcurrentline RIGHT BY 1 PLACES.&lt;/P&gt;&lt;P&gt;                          copylinelength = copylinelength + 1.&lt;/P&gt;&lt;P&gt;                        ENDWHILE.&lt;/P&gt;&lt;P&gt;                        wacontent = copyofcurrentline.&lt;/P&gt;&lt;P&gt;                      ENDIF.&lt;/P&gt;&lt;P&gt;                    CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;                  ENDTRY.&lt;/P&gt;&lt;P&gt;                ENDIF.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt;            CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;          ENDTRY.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        IF NOT syntaxhighlightcomments IS INITIAL AND wacontent+0(1) =&lt;/P&gt;&lt;P&gt;        asterix.&lt;/P&gt;&lt;P&gt;          CONCATENATE '&amp;lt;font color ="' comment_colour '"&amp;gt;' INTO head.&lt;/P&gt;&lt;P&gt;          CONCATENATE head wacontent '&amp;lt;/font&amp;gt;' INTO tail.&lt;/P&gt;&lt;P&gt;          wacontent = tail.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      htmltable = wacontent.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      htmltable = ''.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;    APPEND htmltable.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  htmltable = '&amp;lt;/pre&amp;gt;'.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Add a html footer to the table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM addhtmlfooter USING htmltable[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  icontents[] = htmltable[].&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"convertCodeToHtml&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; convertClassToHtml... Builds an HTML table based upon a text table.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM convertclasstohtml USING icontents LIKE dumihtml[]&lt;/P&gt;&lt;P&gt;                              value(classname)&lt;/P&gt;&lt;P&gt;                              value(shortdescription)&lt;/P&gt;&lt;P&gt;                              value(sourcecodetype)&lt;/P&gt;&lt;P&gt;                              value(syntaxhighlightcomments)&lt;/P&gt;&lt;P&gt;                              value(htmlextension)&lt;/P&gt;&lt;P&gt;                              value(customernamerange)&lt;/P&gt;&lt;P&gt;                              value(getdictstructures).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: htmltable TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: listingname TYPE string VALUE 'Code listing for class:'.&lt;/P&gt;&lt;P&gt;  DATA: descriptionname TYPE string VALUE `Description: `.&lt;/P&gt;&lt;P&gt;  DATA: mytabix TYPE sytabix.&lt;/P&gt;&lt;P&gt;  DATA: wacontent(255).&lt;/P&gt;&lt;P&gt;  DATA: head TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: tail TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: hyperlinkname TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: lowercaselink TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: copyofcurrentline TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: currentlinelength TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  DATA: copylinelength TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Add a html header to the table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM addhtmlheader USING htmltable[]&lt;/P&gt;&lt;P&gt;                              classname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE listingname classname INTO listingname SEPARATED BY space.&lt;/P&gt;&lt;P&gt;  CONCATENATE '&amp;lt;font size="3" face = "Arial" color="' colour_black&lt;/P&gt;&lt;P&gt;  '"&amp;gt;&amp;lt;b&amp;gt;' listingname '&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;' INTO htmltable.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT shortdescription IS INITIAL.&lt;/P&gt;&lt;P&gt;    APPEND '&amp;lt;br&amp;gt;' TO htmltable.&lt;/P&gt;&lt;P&gt;    CONCATENATE descriptionname shortdescription INTO descriptionname&lt;/P&gt;&lt;P&gt;    SEPARATED BY space.&lt;/P&gt;&lt;P&gt;    CONCATENATE '&amp;lt;font size="3" face = "Arial" color="' colour_black&lt;/P&gt;&lt;P&gt;    '"&amp;gt;&amp;lt;b&amp;gt;' descriptionname '&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;' INTO htmltable.&lt;/P&gt;&lt;P&gt;    APPEND htmltable.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  htmltable = '&amp;lt;hr&amp;gt;'.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  htmltable = '&amp;lt;pre width="100"&amp;gt;'.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT icontents INTO wacontent.&lt;/P&gt;&lt;P&gt;    mytabix = sy-tabix.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Comments&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT syntaxhighlightcomments IS INITIAL AND wacontent+0(1) =&lt;/P&gt;&lt;P&gt;    asterix.&lt;/P&gt;&lt;P&gt;      CONCATENATE '&amp;lt;font color ="' comment_colour '"&amp;gt;' INTO head.&lt;/P&gt;&lt;P&gt;      CONCATENATE head wacontent '&amp;lt;/font&amp;gt;' INTO wacontent.&lt;/P&gt;&lt;P&gt;      htmltable = wacontent.&lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Smaller than, greater than signs&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      IF NOT ( icontents IS INITIAL ).&lt;/P&gt;&lt;P&gt;        WHILE ( wacontent CS '&amp;lt;' OR wacontent CS '&amp;gt;' ).&lt;/P&gt;&lt;P&gt;          REPLACE '&amp;lt;' IN wacontent WITH lt.&lt;/P&gt;&lt;P&gt;          REPLACE '&amp;gt;' IN wacontent WITH gt.&lt;/P&gt;&lt;P&gt;        ENDWHILE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Dictionary structures&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF NOT getdictstructures IS INITIAL.&lt;/P&gt;&lt;P&gt;          FIND 'class' IN wacontent IGNORING CASE.&lt;/P&gt;&lt;P&gt;          IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;          Hyperlink for dictionary/structure include&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;            copylinelength = STRLEN( wacontent ).&lt;/P&gt;&lt;P&gt;            copyofcurrentline = wacontent.&lt;/P&gt;&lt;P&gt;            SPLIT copyofcurrentline AT space INTO head tail.&lt;/P&gt;&lt;P&gt;            SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;            SPLIT tail AT space INTO head tail.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;            TRY.&lt;/P&gt;&lt;P&gt;                IF tail&lt;EM&gt;0(1) = 'Y' OR tail&lt;/EM&gt;0(1) = 'Z' OR tail+0(1) = 'y'&lt;/P&gt;&lt;P&gt;                OR tail+0(1) = 'z' OR tail CS customernamerange.&lt;/P&gt;&lt;P&gt;                  CLEAR wacontent.&lt;/P&gt;&lt;P&gt;                  SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;                  SPLIT tail AT period INTO hyperlinkname tail.&lt;/P&gt;&lt;P&gt;                  copyofcurrentline = 'include structure &amp;lt;a href ='.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                  lowercaselink = hyperlinkname.&lt;/P&gt;&lt;P&gt;                  TRANSLATE lowercaselink TO LOWER CASE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;              If we are running on a non UNIX environment we will need&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                 to remove forward slashes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                  IF frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;                    TRANSLATE lowercaselink USING '/_'.&lt;/P&gt;&lt;P&gt;                  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                  CONCATENATE copyofcurrentline&lt;/P&gt;&lt;P&gt;                              '"'&lt;/P&gt;&lt;P&gt;                              lowercaselink    "hyperlinkName&lt;/P&gt;&lt;P&gt;                              '/'&lt;/P&gt;&lt;P&gt;                              'dictionary-'&lt;/P&gt;&lt;P&gt;                              lowercaselink    "hyperlinkName&lt;/P&gt;&lt;P&gt;                              period htmlextension&lt;/P&gt;&lt;P&gt;                              '"&amp;gt;'&lt;/P&gt;&lt;P&gt;                              hyperlinkname&lt;/P&gt;&lt;P&gt;                              '&amp;lt;/a&amp;gt;'&lt;/P&gt;&lt;P&gt;                              period tail INTO copyofcurrentline.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;              Pad the string back out with spaces&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                  WHILE copylinelength &amp;lt; currentlinelength.&lt;/P&gt;&lt;P&gt;                    SHIFT copyofcurrentline RIGHT BY 1 PLACES.&lt;/P&gt;&lt;P&gt;                    copylinelength = copylinelength + 1.&lt;/P&gt;&lt;P&gt;                  ENDWHILE.&lt;/P&gt;&lt;P&gt;                  wacontent = copyofcurrentline.&lt;/P&gt;&lt;P&gt;                ENDIF.&lt;/P&gt;&lt;P&gt;              CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;            ENDTRY.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        htmltable = wacontent.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        htmltable = ''.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND htmltable.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  htmltable = '&amp;lt;/pre&amp;gt;'.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Add a html footer to the table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM addhtmlfooter USING htmltable[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  icontents[] = htmltable[].&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"convertClassToHtml&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;***----&lt;/P&gt;&lt;HR originaltext="--------------------------------------------------------------" /&gt;&lt;P&gt;*-&lt;/P&gt;&lt;P&gt;**----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="3" type="ul"&gt;&lt;P&gt; convertFunctionToHtml... Builds an HTML table based upon a text&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*table&lt;/P&gt;&lt;P&gt;**.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM convertfunctiontohtml USING icontents LIKE dumihtml[]&lt;/P&gt;&lt;P&gt;                                 value(functionname)&lt;/P&gt;&lt;P&gt;                                 value(shortdescription)&lt;/P&gt;&lt;P&gt;                                 value(sourcecodetype)&lt;/P&gt;&lt;P&gt;                                 value(functiondocumentationexists)&lt;/P&gt;&lt;P&gt;                                 value(ismainfunctioninclude)&lt;/P&gt;&lt;P&gt;                                 value(syntaxhighlightcomments)&lt;/P&gt;&lt;P&gt;                                 value(htmlextension)&lt;/P&gt;&lt;P&gt;                                 value(customernamerange)&lt;/P&gt;&lt;P&gt;                                 value(getincludes)&lt;/P&gt;&lt;P&gt;                                 value(getdictstructures).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: htmltable TYPE STANDARD TABLE OF string WITH HEADER LINE.&lt;/P&gt;&lt;P&gt;  DATA: listingname TYPE string VALUE 'Code listing for function:'.&lt;/P&gt;&lt;P&gt;  DATA: descriptionname TYPE string VALUE `Description: `.&lt;/P&gt;&lt;P&gt;  DATA: head(255).&lt;/P&gt;&lt;P&gt;  DATA: tail(255).&lt;/P&gt;&lt;P&gt;  DATA: mytabix TYPE sytabix.&lt;/P&gt;&lt;P&gt;  DATA: nextline TYPE sytabix.&lt;/P&gt;&lt;P&gt;  DATA: hyperlinkname TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: copyofcurrentline TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: currentlinelength TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  DATA: copylinelength TYPE i VALUE 0.&lt;/P&gt;&lt;P&gt;  DATA: ignorefuturelines TYPE i VALUE false.&lt;/P&gt;&lt;P&gt;  DATA: foundasterix TYPE i VALUE false.&lt;/P&gt;&lt;P&gt;  DATA: lowercaselink TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: wanextline TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: wacontent(255).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Add a html header to the table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM addhtmlheader USING htmltable[]&lt;/P&gt;&lt;P&gt;                              functionname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE listingname functionname INTO listingname SEPARATED BY&lt;/P&gt;&lt;P&gt;  space.&lt;/P&gt;&lt;P&gt;  CONCATENATE '&amp;lt;font size="3" face = "Arial" color="' colour_black&lt;/P&gt;&lt;P&gt;  '"&amp;gt;&amp;lt;b&amp;gt;' listingname '&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;' INTO htmltable.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT shortdescription IS INITIAL.&lt;/P&gt;&lt;P&gt;    APPEND '&amp;lt;br&amp;gt;' TO htmltable.&lt;/P&gt;&lt;P&gt;    CONCATENATE descriptionname shortdescription INTO descriptionname&lt;/P&gt;&lt;P&gt;    SEPARATED BY space.&lt;/P&gt;&lt;P&gt;    CONCATENATE '&amp;lt;font size="3" face = "Arial" color="' colour_black&lt;/P&gt;&lt;P&gt;    '"&amp;gt;&amp;lt;b&amp;gt;' descriptionname '&amp;lt;/b&amp;gt;&amp;lt;/font&amp;gt;' INTO htmltable.&lt;/P&gt;&lt;P&gt;    APPEND htmltable.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  htmltable = '&amp;lt;hr&amp;gt;'.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  htmltable = '&amp;lt;pre width="100"&amp;gt;'.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT icontents INTO wacontent.&lt;/P&gt;&lt;P&gt;    mytabix = sy-tabix.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Extra code for adding global and doc hyperlinks to functions&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF sourcecodetype = is_function AND ismainfunctioninclude = true.&lt;/P&gt;&lt;P&gt;      IF sy-tabix &amp;gt; 1.&lt;/P&gt;&lt;P&gt;        IF wacontent+0(1) = asterix AND ignorefuturelines = false.&lt;/P&gt;&lt;P&gt;          foundasterix = true.&lt;/P&gt;&lt;P&gt;        ELSE.&lt;/P&gt;&lt;P&gt;          IF foundasterix = true.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;          Lets add our extra HTML lines in here&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;            APPEND '' TO htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;          Global data hyperlink&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;            IF NOT syntaxhighlightcomments IS INITIAL.&lt;/P&gt;&lt;P&gt;              CONCATENATE '&amp;lt;font color ="' comment_colour '"&amp;gt;' INTO&lt;/P&gt;&lt;P&gt;              copyofcurrentline.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;            CONCATENATE copyofcurrentline '*       &amp;lt;a href ="' INTO&lt;/P&gt;&lt;P&gt;            copyofcurrentline.&lt;/P&gt;&lt;P&gt;            lowercaselink = functionname.&lt;/P&gt;&lt;P&gt;            TRANSLATE lowercaselink TO LOWER CASE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;          If we are running on a non UNIX environment we will need to&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;           remove forward slashes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;            IF frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;              TRANSLATE lowercaselink USING '/_'.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;            CONCATENATE copyofcurrentline 'global-' lowercaselink&lt;/P&gt;&lt;P&gt;            "functionName&lt;/P&gt;&lt;P&gt;                        period htmlextension '"&amp;gt;' 'Global data&lt;/P&gt;&lt;P&gt;declarations' '&amp;lt;/a&amp;gt;' INTO copyofcurrentline.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;            IF NOT syntaxhighlightcomments IS INITIAL.&lt;/P&gt;&lt;P&gt;              CONCATENATE copyofcurrentline '&amp;lt;/font&amp;gt;' INTO&lt;/P&gt;&lt;P&gt;              copyofcurrentline.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;            APPEND copyofcurrentline TO htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;          Documentation hyperlink.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;            IF functiondocumentationexists = true.&lt;/P&gt;&lt;P&gt;              IF NOT syntaxhighlightcomments IS INITIAL.&lt;/P&gt;&lt;P&gt;                CONCATENATE '&amp;lt;font color ="' comment_colour '"&amp;gt;' INTO&lt;/P&gt;&lt;P&gt;                copyofcurrentline.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              CONCATENATE copyofcurrentline '*       &amp;lt;a href ="' INTO&lt;/P&gt;&lt;P&gt;              copyofcurrentline.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              lowercaselink = functionname.&lt;/P&gt;&lt;P&gt;              TRANSLATE lowercaselink TO LOWER CASE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;            If we are running on a non UNIX environment we will need&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;           to remove forward slashes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              IF frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;                TRANSLATE lowercaselink USING '/_'.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              CONCATENATE copyofcurrentline&lt;/P&gt;&lt;P&gt;                          'docs-'&lt;/P&gt;&lt;P&gt;                          lowercaselink  "functionName&lt;/P&gt;&lt;P&gt;                          period htmlextension '"&amp;gt;'&lt;/P&gt;&lt;P&gt;                          'Function module documentation'&lt;/P&gt;&lt;P&gt;                          '&amp;lt;/a&amp;gt;'&lt;/P&gt;&lt;P&gt;                          INTO copyofcurrentline.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              IF NOT pcomm IS INITIAL.&lt;/P&gt;&lt;P&gt;                CONCATENATE copyofcurrentline '&amp;lt;/font&amp;gt;' INTO&lt;/P&gt;&lt;P&gt;                copyofcurrentline.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt;              APPEND copyofcurrentline TO htmltable.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;            foundasterix = false.&lt;/P&gt;&lt;P&gt;            ignorefuturelines = true.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Carry on as normal&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    IF NOT ( icontents IS INITIAL ).&lt;/P&gt;&lt;P&gt;      WHILE ( wacontent CS '&amp;lt;' OR wacontent CS '&amp;gt;' ).&lt;/P&gt;&lt;P&gt;        REPLACE '&amp;lt;' IN wacontent WITH lt.&lt;/P&gt;&lt;P&gt;        REPLACE '&amp;gt;' IN wacontent WITH gt.&lt;/P&gt;&lt;P&gt;      ENDWHILE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      IF wacontent+0(1) &amp;lt;&amp;gt; asterix.&lt;/P&gt;&lt;P&gt;        currentlinelength = STRLEN( wacontent ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Don't hyperlink anything for files of type documentation&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF sourcecodetype &amp;lt;&amp;gt; is_documentation.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Check for any functions to highlight&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          IF ( wacontent CS callfunction ) AND ( wacontent &amp;lt;&amp;gt;&lt;/P&gt;&lt;P&gt;          'DESTINATION' ).&lt;/P&gt;&lt;P&gt;            nextline = mytabix + 1.&lt;/P&gt;&lt;P&gt;            READ TABLE icontents INTO wanextline INDEX nextline.&lt;/P&gt;&lt;P&gt;            TRANSLATE wanextline TO UPPER CASE.&lt;/P&gt;&lt;P&gt;            IF wanextline NS 'DESTINATION'.&lt;/P&gt;&lt;P&gt;              copyofcurrentline = wacontent.&lt;/P&gt;&lt;P&gt;              SHIFT copyofcurrentline LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              copylinelength = STRLEN( copyofcurrentline ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              SPLIT copyofcurrentline AT space INTO head tail.&lt;/P&gt;&lt;P&gt;              SPLIT tail AT space INTO head tail.&lt;/P&gt;&lt;P&gt;              SPLIT tail AT space INTO head tail.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;            Function name is now in head&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;              TRANSLATE head USING ''' '.&lt;/P&gt;&lt;P&gt;              SHIFT head LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;              TRY.&lt;/P&gt;&lt;P&gt;                  IF head&lt;EM&gt;0(1) = 'Y' OR head&lt;/EM&gt;0(1) = 'Z' OR head+0(1) = 'y'&lt;/P&gt;&lt;P&gt;                  OR head+0(1) = 'z' OR head CS customernamerange.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                Definately a customer function module&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                    hyperlinkname = head.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                    IF sourcecodetype = is_function.&lt;/P&gt;&lt;P&gt;                      copyofcurrentline = 'call function &amp;lt;a href ="../'.&lt;/P&gt;&lt;P&gt;                    ELSE.&lt;/P&gt;&lt;P&gt;                      copyofcurrentline = 'call function &amp;lt;a href ="'.&lt;/P&gt;&lt;P&gt;                    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                    lowercaselink = hyperlinkname.&lt;/P&gt;&lt;P&gt;                    TRANSLATE lowercaselink TO LOWER CASE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                If we are running on a non UNIX environment we will&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;               need to remove forward slashes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                    IF frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;                      TRANSLATE lowercaselink USING '/_'.&lt;/P&gt;&lt;P&gt;                    ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                    CONCATENATE copyofcurrentline&lt;/P&gt;&lt;P&gt;                                lowercaselink     "hyperlinkName&lt;/P&gt;&lt;P&gt;                                '/'&lt;/P&gt;&lt;P&gt;                                lowercaselink     "hyperlinkName&lt;/P&gt;&lt;P&gt;                                period htmlextension '"&amp;gt;'&lt;/P&gt;&lt;P&gt;                                ''''&lt;/P&gt;&lt;P&gt;                                hyperlinkname&lt;/P&gt;&lt;P&gt;                                ''''&lt;/P&gt;&lt;P&gt;                                '&amp;lt;/a&amp;gt;'&lt;/P&gt;&lt;P&gt;                                tail INTO copyofcurrentline.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                Pad the string back out with spaces&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                    WHILE copylinelength &amp;lt; currentlinelength.&lt;/P&gt;&lt;P&gt;                      SHIFT copyofcurrentline RIGHT BY 1 PLACES.&lt;/P&gt;&lt;P&gt;                      copylinelength = copylinelength + 1.&lt;/P&gt;&lt;P&gt;                    ENDWHILE.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                    wacontent = copyofcurrentline.&lt;/P&gt;&lt;P&gt;                  ENDIF.&lt;/P&gt;&lt;P&gt;                CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;              ENDTRY.&lt;/P&gt;&lt;P&gt;            ENDIF.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Check for any customer includes to hyperlink&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF wacontent CS include OR wacontent CS lowinclude.&lt;/P&gt;&lt;P&gt;          copyofcurrentline = wacontent.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          SHIFT copyofcurrentline LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;          copylinelength = STRLEN( copyofcurrentline ).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          SPLIT copyofcurrentline AT space INTO head tail.&lt;/P&gt;&lt;P&gt;          SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          TRY.&lt;/P&gt;&lt;P&gt;              IF ( tail&lt;EM&gt;0(1) = 'Y' OR tail&lt;/EM&gt;0(1) = 'Z' OR tail+0(1) = 'y'&lt;/P&gt;&lt;P&gt;              OR tail+0(1) = 'z'&lt;/P&gt;&lt;P&gt;                   OR tail CS customernamerange OR tail+0(2) = 'mz' OR&lt;/P&gt;&lt;P&gt;              tail+0(2) = 'MZ' ) AND NOT getincludes IS INITIAL.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;            Hyperlink for program includes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                CLEAR wacontent.&lt;/P&gt;&lt;P&gt;                SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;                SPLIT tail AT period INTO hyperlinkname tail.&lt;/P&gt;&lt;P&gt;                copyofcurrentline = 'include &amp;lt;a href ="'.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                lowercaselink = hyperlinkname.&lt;/P&gt;&lt;P&gt;                TRANSLATE lowercaselink TO LOWER CASE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;            If we are running on a non UNIX environment we will need&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;         to remove forward slashes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                IF frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;                  TRANSLATE lowercaselink USING '/_'.&lt;/P&gt;&lt;P&gt;                ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                CONCATENATE copyofcurrentline&lt;/P&gt;&lt;P&gt;                            lowercaselink       "hyperlinkName&lt;/P&gt;&lt;P&gt;                            period htmlextension '"&amp;gt;'&lt;/P&gt;&lt;P&gt;                            hyperlinkname&lt;/P&gt;&lt;P&gt;                            '&amp;lt;/a&amp;gt;'&lt;/P&gt;&lt;P&gt;                            period tail INTO copyofcurrentline.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;            Pad the string back out with spaces&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                WHILE copylinelength &amp;lt; currentlinelength.&lt;/P&gt;&lt;P&gt;                  SHIFT copyofcurrentline RIGHT BY 1 PLACES.&lt;/P&gt;&lt;P&gt;                  copylinelength = copylinelength + 1.&lt;/P&gt;&lt;P&gt;                ENDWHILE.&lt;/P&gt;&lt;P&gt;                wacontent = copyofcurrentline.&lt;/P&gt;&lt;P&gt;              ELSE.&lt;/P&gt;&lt;P&gt;                IF NOT getdictstructures IS INITIAL.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;              Hyperlink for structure include&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                  copylinelength = STRLEN( copyofcurrentline ).&lt;/P&gt;&lt;P&gt;                  SPLIT copyofcurrentline AT space INTO head tail.&lt;/P&gt;&lt;P&gt;                  SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;                  SPLIT tail AT space INTO head tail.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                  TRY.&lt;/P&gt;&lt;P&gt;                      IF tail&lt;EM&gt;0(1) = 'Y' OR tail&lt;/EM&gt;0(1) = 'Z' OR tail+0(1) =&lt;/P&gt;&lt;P&gt;                      'y' OR tail+0(1) = 'z' OR tail CS customernamerange.&lt;/P&gt;&lt;P&gt;                        CLEAR wacontent.&lt;/P&gt;&lt;P&gt;                        SHIFT tail LEFT DELETING LEADING space.&lt;/P&gt;&lt;P&gt;                        SPLIT tail AT period INTO hyperlinkname tail.&lt;/P&gt;&lt;P&gt;                        copyofcurrentline = 'include structure &amp;lt;a href ='.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                        lowercaselink = hyperlinkname.&lt;/P&gt;&lt;P&gt;                        TRANSLATE lowercaselink TO LOWER CASE.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                  If we are running on a non UNIX environment we will&lt;/P&gt;&lt;/LI&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;               need to remove forward slashes&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                        IF frontendopsystem = non_unix.&lt;/P&gt;&lt;P&gt;                          TRANSLATE lowercaselink USING '/_'.&lt;/P&gt;&lt;P&gt;                        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;                        CONCATENATE copyofcurrentline&lt;/P&gt;&lt;P&gt;                                    '"'&lt;/P&gt;&lt;P&gt;                                    lowercaselink    "hyperlinkName&lt;/P&gt;&lt;P&gt;                                    '/'&lt;/P&gt;&lt;P&gt;                                    'dictionary-'&lt;/P&gt;&lt;P&gt;                                    lowercaselink    "hyperlinkName&lt;/P&gt;&lt;P&gt;                                    period htmlextension&lt;/P&gt;&lt;P&gt;                                    '"&amp;gt;'&lt;/P&gt;&lt;P&gt;                                    hyperlinkname&lt;/P&gt;&lt;P&gt;                                    '&amp;lt;/a&amp;gt;'&lt;/P&gt;&lt;P&gt;                                    period tail INTO copyofcurrentline.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;                  Pad the string back out with spaces&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;                        WHILE copylinelength &amp;lt; currentlinelength.&lt;/P&gt;&lt;P&gt;                          SHIFT copyofcurrentline RIGHT BY 1 PLACES.&lt;/P&gt;&lt;P&gt;                          copylinelength = copylinelength + 1.&lt;/P&gt;&lt;P&gt;                        ENDWHILE.&lt;/P&gt;&lt;P&gt;                        wacontent = copyofcurrentline.&lt;/P&gt;&lt;P&gt;                      ENDIF.&lt;/P&gt;&lt;P&gt;                    CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;                  ENDTRY.&lt;/P&gt;&lt;P&gt;                ENDIF.&lt;/P&gt;&lt;P&gt;              ENDIF.&lt;/P&gt;&lt;P&gt;            CATCH cx_sy_range_out_of_bounds INTO objruntimeerror.&lt;/P&gt;&lt;P&gt;          ENDTRY.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ELSE.&lt;/P&gt;&lt;P&gt;        IF NOT syntaxhighlightcomments IS INITIAL AND wacontent+0(1) =&lt;/P&gt;&lt;P&gt;        asterix.&lt;/P&gt;&lt;P&gt;          CONCATENATE '&amp;lt;font color ="' comment_colour '"&amp;gt;' INTO head.&lt;/P&gt;&lt;P&gt;          CONCATENATE head wacontent '&amp;lt;/font&amp;gt;' INTO tail.&lt;/P&gt;&lt;P&gt;          wacontent = tail.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt;      ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;      htmltable = wacontent.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    ELSE.&lt;/P&gt;&lt;P&gt;      htmltable = ''.&lt;/P&gt;&lt;P&gt;    ENDIF.&lt;/P&gt;&lt;P&gt;    APPEND htmltable.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  htmltable = '&amp;lt;/pre&amp;gt;'.&lt;/P&gt;&lt;P&gt;  APPEND htmltable.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Add a html footer to the table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  PERFORM addhtmlfooter USING htmltable[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  icontents[] = htmltable[].&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"convertFunctionToHtml&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; buildColumnHeaders... build table column names&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM buildcolumnheaders USING iloccolumncaptions LIKE dumihtml[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  APPEND 'Row' TO iloccolumncaptions.&lt;/P&gt;&lt;P&gt;  APPEND 'Field name' TO iloccolumncaptions.&lt;/P&gt;&lt;P&gt;  APPEND 'Position' TO iloccolumncaptions.&lt;/P&gt;&lt;P&gt;  APPEND 'Key' TO iloccolumncaptions.&lt;/P&gt;&lt;P&gt;  APPEND 'Data element' TO iloccolumncaptions.&lt;/P&gt;&lt;P&gt;  APPEND 'Domain' TO iloccolumncaptions.&lt;/P&gt;&lt;P&gt;  APPEND 'Datatype' TO iloccolumncaptions.&lt;/P&gt;&lt;P&gt;  APPEND 'Length' TO iloccolumncaptions.&lt;/P&gt;&lt;P&gt;  APPEND 'Domain text' TO iloccolumncaptions.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"buildColumnHeaders&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;**----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;*-&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;addHTMLHeader...  add a html formatted header to our output table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;**----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;*-&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;FORM addhtmlheader USING ilocheader LIKE dumihtml[]&lt;/P&gt;&lt;P&gt;                         value(title).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: waheader TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  APPEND '&amp;lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"&amp;gt;' TO&lt;/P&gt;&lt;P&gt;  ilocheader.&lt;/P&gt;&lt;P&gt;  APPEND '&amp;lt;html&amp;gt;' TO ilocheader.&lt;/P&gt;&lt;P&gt;  APPEND '&amp;lt;head&amp;gt;' TO ilocheader.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE '&amp;lt;title&amp;gt;' title '&amp;lt;/title&amp;gt;' INTO waheader.&lt;/P&gt;&lt;P&gt;  APPEND waheader TO ilocheader.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  APPEND '&amp;lt;/head&amp;gt;' TO ilocheader.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF NOT pback IS INITIAL.&lt;/P&gt;&lt;P&gt;    CONCATENATE '&amp;lt;body bgcolor="' background_colour '"&amp;gt;' INTO waheader.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    CONCATENATE '&amp;lt;body bgcolor="' colour_white '"&amp;gt;' INTO waheader.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  APPEND waheader TO ilocheader.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"addHTMLHeader&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;**----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;*-&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;addHTMLFooter...  add a html formatted footer to our output table&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;**----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;*-&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;FORM addhtmlfooter USING ilocfooter LIKE dumihtml[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: footermessage TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: wafooter TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  PERFORM buildfootermessage USING 'HTML'&lt;/P&gt;&lt;P&gt;                                   footermessage.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  APPEND '&amp;lt;hr&amp;gt;' TO ilocfooter.&lt;/P&gt;&lt;P&gt;  CONCATENATE '&amp;lt;font size="2" face = "Sans Serif"&amp;gt;' footermessage INTO&lt;/P&gt;&lt;P&gt;  wafooter.&lt;/P&gt;&lt;P&gt;  APPEND wafooter TO ilocfooter.&lt;/P&gt;&lt;P&gt;  APPEND '&amp;lt;/font&amp;gt;' TO ilocfooter.&lt;/P&gt;&lt;P&gt;  APPEND '&amp;lt;/body&amp;gt;' TO ilocfooter.&lt;/P&gt;&lt;P&gt;  APPEND '&amp;lt;/html&amp;gt;' TO ilocfooter.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"addHTMLFooter&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;**----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;*-&lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;UL&gt;&lt;LI level="2" type="ul"&gt;&lt;P&gt;buildFooterMessage...Returns a footer message based on the output&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;&lt;P&gt;*file&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;type.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;**----&lt;/P&gt;&lt;HR originaltext="-----------------------------------------------------------------" /&gt;&lt;P&gt;*-&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM buildfootermessage USING filetype&lt;/P&gt;&lt;P&gt;                              returnmessage.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF filetype = 'HTML'.&lt;/P&gt;&lt;P&gt;    CONCATENATE `Extracted by Direct Download Enterprise version `&lt;/P&gt;&lt;P&gt;    versionno ' - E.G.Mellodew. 1998-2004 UK.'&lt;/P&gt;&lt;P&gt;                INTO returnmessage.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    CONCATENATE `Extracted by Direct Download Enteprise version `&lt;/P&gt;&lt;P&gt;    versionno ' - E.G.Mellodew. 1998-2004 UK.'&lt;/P&gt;&lt;P&gt;                INTO returnmessage.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"buildFooterMessage&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;********************************&lt;/P&gt;&lt;P&gt;************************************DISPLAY&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;ROUTINES&lt;/STRONG&gt;***************************************************&lt;/P&gt;&lt;P&gt;************************************************************************&lt;/P&gt;&lt;P&gt;********************************&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; fillTreeNodeTables...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM filltreenodetables USING ilocdictionary LIKE idictionary[]&lt;/P&gt;&lt;P&gt;                              iloctreedisplay LIKE itreedisplay[]&lt;/P&gt;&lt;P&gt;                              value(runtime).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: tablelines TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: watreedisplay LIKE snodetext.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wadictionary&amp;gt; TYPE tdicttable.&lt;/P&gt;&lt;P&gt;  DATA: tablelinesstring TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: runtimechar(10).&lt;/P&gt;&lt;P&gt;  DATA: sublevel TYPE string.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  tablelines = LINES( ilocdictionary ).&lt;/P&gt;&lt;P&gt;  tablelinesstring = tablelines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF tablelines = 1.&lt;/P&gt;&lt;P&gt;    CONCATENATE tablelinesstring 'table downloaded' INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text2 SEPARATED BY space.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    CONCATENATE tablelinesstring 'tables downloaded' INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text2 SEPARATED BY space.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  WRITE runtime TO runtimechar.&lt;/P&gt;&lt;P&gt;  CONCATENATE watreedisplay-text2 '- runtime' runtimechar INTO&lt;/P&gt;&lt;P&gt;  watreedisplay-text2 SEPARATED BY space.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;include header display record.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  watreedisplay-tlevel = '1'.&lt;/P&gt;&lt;P&gt;  watreedisplay-tlength2  = 60.&lt;/P&gt;&lt;P&gt;  watreedisplay-tcolor2    = 1.&lt;/P&gt;&lt;P&gt;  APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocdictionary ASSIGNING &amp;lt;wadictionary&amp;gt;.&lt;/P&gt;&lt;P&gt;    watreedisplay-tlevel = '2'. .&lt;/P&gt;&lt;P&gt;    watreedisplay-text2 = &amp;lt;wadictionary&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;    watreedisplay-tcolor2    = 3.&lt;/P&gt;&lt;P&gt;    watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;    watreedisplay-tcolor3    = 3.&lt;/P&gt;&lt;P&gt;    watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;    CONCATENATE 'Dictionary:' &amp;lt;wadictionary&amp;gt;-tabletitle INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text3 SEPARATED BY space.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;    APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"fillTreeNodeTables&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; fillTreeNodeMessages...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM filltreenodemessages USING ilocmessages LIKE imessages[]&lt;/P&gt;&lt;P&gt;                                iloctreedisplay LIKE itreedisplay[]&lt;/P&gt;&lt;P&gt;                                value(runtime).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: tablelines TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: watreedisplay LIKE snodetext.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wamessage&amp;gt; TYPE tmessage.&lt;/P&gt;&lt;P&gt;  DATA: tablelinesstring TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: runtimechar(10).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SORT ilocmessages ASCENDING BY arbgb.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocmessages ASSIGNING &amp;lt;wamessage&amp;gt;.&lt;/P&gt;&lt;P&gt;    AT NEW arbgb.&lt;/P&gt;&lt;P&gt;      tablelines = tablelines + 1.&lt;/P&gt;&lt;P&gt;    ENDAT.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;  tablelinesstring = tablelines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF tablelines = 1.&lt;/P&gt;&lt;P&gt;    CONCATENATE tablelinesstring 'message class downloaded' INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text2 SEPARATED BY space.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    CONCATENATE tablelinesstring 'message classes downloaded' INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text2 SEPARATED BY space.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  WRITE runtime TO runtimechar.&lt;/P&gt;&lt;P&gt;  CONCATENATE watreedisplay-text2 '- runtime' runtimechar INTO&lt;/P&gt;&lt;P&gt;  watreedisplay-text2 SEPARATED BY space.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;include header display record.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  watreedisplay-tlevel = '1'.&lt;/P&gt;&lt;P&gt;  watreedisplay-tlength2 = 60.&lt;/P&gt;&lt;P&gt;  watreedisplay-tcolor2 = 1.&lt;/P&gt;&lt;P&gt;  APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocmessages ASSIGNING &amp;lt;wamessage&amp;gt;.&lt;/P&gt;&lt;P&gt;    AT NEW arbgb.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = '2'.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 5.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 5.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      watreedisplay-text3 = &amp;lt;wamessage&amp;gt;-stext.&lt;/P&gt;&lt;P&gt;      CONCATENATE 'Message class:'  watreedisplay-text3 INTO&lt;/P&gt;&lt;P&gt;      watreedisplay-text3 SEPARATED BY space.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;    ENDAT.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"fillTreeNodeMessages&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; fillTreeNodeFunctions...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM filltreenodefunctions USING ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                                 iloctreedisplay LIKE itreedisplay[]&lt;/P&gt;&lt;P&gt;                                 value(runtime).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: tablelines TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: watreedisplay LIKE snodetext.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wafunction&amp;gt; TYPE tfunction.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wascreen&amp;gt; TYPE tscreenflow.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waguititle&amp;gt; TYPE tguititle.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wadictionary&amp;gt; TYPE tdicttable.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wainclude&amp;gt; TYPE tinclude.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wamessage&amp;gt; TYPE tmessage.&lt;/P&gt;&lt;P&gt;  DATA: tablelinesstring TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: runtimechar(10).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  SORT ilocfunctions ASCENDING BY functionname.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  tablelines = LINES( ilocfunctions ).&lt;/P&gt;&lt;P&gt;  tablelinesstring = tablelines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF tablelines = 1.&lt;/P&gt;&lt;P&gt;    CONCATENATE tablelinesstring ` function downloaded` INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text2.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    CONCATENATE tablelinesstring ` functions downloaded` INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text2.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  WRITE runtime TO runtimechar.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE watreedisplay-text2 ` - runtime ` runtimechar INTO&lt;/P&gt;&lt;P&gt;  watreedisplay-text2.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;include header display record.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  watreedisplay-tlevel = '1'.&lt;/P&gt;&lt;P&gt;  watreedisplay-tlength2  = 60.&lt;/P&gt;&lt;P&gt;  watreedisplay-tcolor2    = 1.&lt;/P&gt;&lt;P&gt;  APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;Lets fill the detail in&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  LOOP AT ilocfunctions ASSIGNING &amp;lt;wafunction&amp;gt;.&lt;/P&gt;&lt;P&gt;    watreedisplay-tlevel = 2.&lt;/P&gt;&lt;P&gt;    watreedisplay-text2 = &amp;lt;wafunction&amp;gt;-functionname.&lt;/P&gt;&lt;P&gt;    watreedisplay-tcolor2    = 7.&lt;/P&gt;&lt;P&gt;    watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;    watreedisplay-tcolor3    = 7.&lt;/P&gt;&lt;P&gt;    watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;    CONCATENATE `Function: ` &amp;lt;wafunction&amp;gt;-functionname INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text3.&lt;/P&gt;&lt;P&gt;    APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Screens.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;wafunction&amp;gt;-iscreenflow ASSIGNING &amp;lt;wascreen&amp;gt;.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = '2'.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 = &amp;lt;wascreen&amp;gt;-screen.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 6.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 6.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      watreedisplay-text3 = 'Screen'.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO itreedisplay.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  GUI Title.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;wafunction&amp;gt;-iguititle ASSIGNING &amp;lt;waguititle&amp;gt;.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = '2'.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 = &amp;lt;waguititle&amp;gt;-obj_code.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 6.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 6.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      watreedisplay-text3 = 'GUI Title'.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO itreedisplay.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Fill in the tree with include information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;wafunction&amp;gt;-iincludes ASSIGNING &amp;lt;wainclude&amp;gt;.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 =  &amp;lt;wainclude&amp;gt;-includename.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 4.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 4.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      CONCATENATE `Include:   ` &amp;lt;wainclude&amp;gt;-includetitle INTO&lt;/P&gt;&lt;P&gt;      watreedisplay-text3.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  fill in the tree with dictionary information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;wafunction&amp;gt;-idictstruct ASSIGNING &amp;lt;wadictionary&amp;gt;.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 =  &amp;lt;wadictionary&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      CONCATENATE `Dictionary:` &amp;lt;wadictionary&amp;gt;-tabletitle INTO&lt;/P&gt;&lt;P&gt;      watreedisplay-text3.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  fill in the tree with message information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    SORT &amp;lt;wafunction&amp;gt;-imessages[] ASCENDING BY arbgb.&lt;/P&gt;&lt;P&gt;    LOOP AT &amp;lt;wafunction&amp;gt;-imessages ASSIGNING &amp;lt;wamessage&amp;gt;.&lt;/P&gt;&lt;P&gt;      AT NEW arbgb.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlevel = 3.&lt;/P&gt;&lt;P&gt;        watreedisplay-text2 = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor2    = 5.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor3    = 5.&lt;/P&gt;&lt;P&gt;        watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Select the message class text if we do not have it already&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF &amp;lt;wamessage&amp;gt;-stext IS INITIAL.&lt;/P&gt;&lt;P&gt;          SELECT SINGLE stext FROM t100a&lt;/P&gt;&lt;P&gt;                              INTO &amp;lt;wamessage&amp;gt;-stext&lt;/P&gt;&lt;P&gt;                              WHERE arbgb = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        watreedisplay-text3 = &amp;lt;wamessage&amp;gt;-stext.&lt;/P&gt;&lt;P&gt;        CONCATENATE `Message class: `  watreedisplay-text3 INTO&lt;/P&gt;&lt;P&gt;        watreedisplay-text3.&lt;/P&gt;&lt;P&gt;        APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;      ENDAT.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"fillTreeNodeFunctions&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; fillTreeNodePrograms&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;FORM filltreenodeprograms USING ilocprograms LIKE iprograms[]&lt;/P&gt;&lt;P&gt;                                ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                                iloctreedisplay LIKE itreedisplay[]&lt;/P&gt;&lt;P&gt;                                value(runtime).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: tablelines TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: watreedisplay LIKE snodetext.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waprogram&amp;gt; TYPE tprogram.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wascreen&amp;gt; TYPE tscreenflow.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wafunction&amp;gt; TYPE tfunction.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wadictionary&amp;gt; TYPE tdicttable.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wainclude&amp;gt; TYPE tinclude.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wamessage&amp;gt; TYPE tmessage.&lt;/P&gt;&lt;P&gt;  DATA: tablelinesstring TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: runtimechar(10).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  tablelines = LINES( ilocprograms ).&lt;/P&gt;&lt;P&gt;  tablelinesstring = tablelines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF tablelines = 1.&lt;/P&gt;&lt;P&gt;    CONCATENATE tablelinesstring ` program downloaded` INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text2.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    CONCATENATE tablelinesstring ` programs downloaded` INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text2.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  WRITE runtime TO runtimechar.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE watreedisplay-text2 ` - runtime ` runtimechar INTO&lt;/P&gt;&lt;P&gt;  watreedisplay-text2.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;include header display record.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  watreedisplay-tlevel = '1'.&lt;/P&gt;&lt;P&gt;  watreedisplay-tlength2  = 60.&lt;/P&gt;&lt;P&gt;  watreedisplay-tcolor2    = 1.&lt;/P&gt;&lt;P&gt;  APPEND watreedisplay TO itreedisplay.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocprograms ASSIGNING &amp;lt;waprogram&amp;gt;.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Main programs.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    watreedisplay-tlevel = '2'.&lt;/P&gt;&lt;P&gt;    watreedisplay-text2 = &amp;lt;waprogram&amp;gt;-progname.&lt;/P&gt;&lt;P&gt;    watreedisplay-tcolor2    = 1.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Description&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;    watreedisplay-tcolor3    = 1.&lt;/P&gt;&lt;P&gt;    watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;    CONCATENATE `Program: ` &amp;lt;waprogram&amp;gt;-programtitle INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text3.&lt;/P&gt;&lt;P&gt;    APPEND watreedisplay TO itreedisplay.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Screens.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;waprogram&amp;gt;-iscreenflow ASSIGNING &amp;lt;wascreen&amp;gt;.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = '3'.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 = &amp;lt;wascreen&amp;gt;-screen.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 6.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 6.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      watreedisplay-text3 = 'Screen'.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO itreedisplay.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  fill in the tree with message information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    SORT &amp;lt;waprogram&amp;gt;-imessages[] ASCENDING BY arbgb.&lt;/P&gt;&lt;P&gt;    LOOP AT &amp;lt;waprogram&amp;gt;-imessages ASSIGNING &amp;lt;wamessage&amp;gt;.&lt;/P&gt;&lt;P&gt;      AT NEW arbgb.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlevel = 3.&lt;/P&gt;&lt;P&gt;        watreedisplay-text2 = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor2    = 5.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor3    = 5.&lt;/P&gt;&lt;P&gt;        watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Select the message class text if we do not have it already&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF &amp;lt;wamessage&amp;gt;-stext IS INITIAL.&lt;/P&gt;&lt;P&gt;          SELECT SINGLE stext FROM t100a&lt;/P&gt;&lt;P&gt;                              INTO &amp;lt;wamessage&amp;gt;-stext&lt;/P&gt;&lt;P&gt;                              WHERE arbgb = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        watreedisplay-text3 = &amp;lt;wamessage&amp;gt;-stext.&lt;/P&gt;&lt;P&gt;        CONCATENATE `Message class: `  watreedisplay-text3 INTO&lt;/P&gt;&lt;P&gt;        watreedisplay-text3.&lt;/P&gt;&lt;P&gt;        APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;      ENDAT.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Fill in the tree with include information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;waprogram&amp;gt;-iincludes ASSIGNING &amp;lt;wainclude&amp;gt;.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 =  &amp;lt;wainclude&amp;gt;-includename.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 4.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 4.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      CONCATENATE `Include:   ` &amp;lt;wainclude&amp;gt;-includetitle INTO&lt;/P&gt;&lt;P&gt;      watreedisplay-text3.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  fill in the tree with dictionary information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;waprogram&amp;gt;-idictstruct ASSIGNING &amp;lt;wadictionary&amp;gt;.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 =  &amp;lt;wadictionary&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      CONCATENATE `Dictionary:    ` &amp;lt;wadictionary&amp;gt;-tabletitle INTO&lt;/P&gt;&lt;P&gt;      watreedisplay-text3.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Function Modules&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT ilocfunctions ASSIGNING &amp;lt;wafunction&amp;gt; WHERE programlinkname =&lt;/P&gt;&lt;P&gt;    &amp;lt;waprogram&amp;gt;-progname.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 = &amp;lt;wafunction&amp;gt;-functionname.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 7.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 7.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      CONCATENATE `Function:      ` &amp;lt;wafunction&amp;gt;-functionname INTO&lt;/P&gt;&lt;P&gt;      watreedisplay-text3.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Fill in the tree with include information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      LOOP AT &amp;lt;wafunction&amp;gt;-iincludes ASSIGNING &amp;lt;wainclude&amp;gt;.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlevel = 4.&lt;/P&gt;&lt;P&gt;        watreedisplay-text2 =  &amp;lt;wainclude&amp;gt;-includename.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor2    = 4.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor3    = 4.&lt;/P&gt;&lt;P&gt;        watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;        CONCATENATE `Include:       ` &amp;lt;wainclude&amp;gt;-includetitle INTO&lt;/P&gt;&lt;P&gt;        watreedisplay-text3.&lt;/P&gt;&lt;P&gt;        APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;      ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    fill in the tree with dictionary information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      LOOP AT &amp;lt;wafunction&amp;gt;-idictstruct ASSIGNING &amp;lt;wadictionary&amp;gt;.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlevel = 4.&lt;/P&gt;&lt;P&gt;        watreedisplay-text2 =  &amp;lt;wadictionary&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor2    = 3.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor3    = 3.&lt;/P&gt;&lt;P&gt;        watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;        CONCATENATE `Dictionary:    ` &amp;lt;wadictionary&amp;gt;-tabletitle INTO&lt;/P&gt;&lt;P&gt;        watreedisplay-text3.&lt;/P&gt;&lt;P&gt;        APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;      ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    fill in the tree with message information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SORT &amp;lt;wafunction&amp;gt;-imessages[] ASCENDING BY arbgb.&lt;/P&gt;&lt;P&gt;      LOOP AT &amp;lt;wafunction&amp;gt;-imessages ASSIGNING &amp;lt;wamessage&amp;gt;.&lt;/P&gt;&lt;P&gt;        AT NEW arbgb.&lt;/P&gt;&lt;P&gt;          watreedisplay-tlevel = 4.&lt;/P&gt;&lt;P&gt;          watreedisplay-text2 = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;          watreedisplay-tcolor2    = 5.&lt;/P&gt;&lt;P&gt;          watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;          watreedisplay-tcolor3    = 5.&lt;/P&gt;&lt;P&gt;          watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Select the message class text if we do not have it already&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          IF &amp;lt;wamessage&amp;gt;-stext IS INITIAL.&lt;/P&gt;&lt;P&gt;            SELECT SINGLE stext FROM t100a&lt;/P&gt;&lt;P&gt;                                INTO &amp;lt;wamessage&amp;gt;-stext&lt;/P&gt;&lt;P&gt;                                WHERE arbgb = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          watreedisplay-text3 = &amp;lt;wamessage&amp;gt;-stext.&lt;/P&gt;&lt;P&gt;          CONCATENATE `Message class:  `  watreedisplay-text3 INTO&lt;/P&gt;&lt;P&gt;          watreedisplay-text3.&lt;/P&gt;&lt;P&gt;          APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;        ENDAT.&lt;/P&gt;&lt;P&gt;      ENDLOOP.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"fillTreeNodePrograms&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; fillTreeNodeClasses&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM filltreenodeclasses USING ilocclasses LIKE iclasses[]&lt;/P&gt;&lt;P&gt;                               ilocfunctions LIKE ifunctions[]&lt;/P&gt;&lt;P&gt;                               iloctreedisplay LIKE itreedisplay[]&lt;/P&gt;&lt;P&gt;                               value(runtime).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: tablelines TYPE i.&lt;/P&gt;&lt;P&gt;  DATA: watreedisplay LIKE snodetext.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;waclass&amp;gt; TYPE tclass.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wamethod&amp;gt; TYPE tmethod.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wafunction&amp;gt; TYPE tfunction.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wadictionary&amp;gt; TYPE tdicttable.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wainclude&amp;gt; TYPE tinclude.&lt;/P&gt;&lt;P&gt;  FIELD-SYMBOLS: &amp;lt;wamessage&amp;gt; TYPE tmessage.&lt;/P&gt;&lt;P&gt;  DATA: tablelinesstring TYPE string.&lt;/P&gt;&lt;P&gt;  DATA: runtimechar(10).&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  tablelines = LINES( ilocclasses ).&lt;/P&gt;&lt;P&gt;  tablelinesstring = tablelines.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  IF tablelines = 1.&lt;/P&gt;&lt;P&gt;    CONCATENATE tablelinesstring ` class downloaded` INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text2.&lt;/P&gt;&lt;P&gt;  ELSE.&lt;/P&gt;&lt;P&gt;    CONCATENATE tablelinesstring ` classes downloaded` INTO&lt;/P&gt;&lt;P&gt;    watreedisplay-text2.&lt;/P&gt;&lt;P&gt;  ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  WRITE runtime TO runtimechar.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  CONCATENATE watreedisplay-text2 ` - runtime ` runtimechar INTO&lt;/P&gt;&lt;P&gt;  watreedisplay-text2.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;include header display record.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  watreedisplay-tlevel = '1'.&lt;/P&gt;&lt;P&gt;  watreedisplay-tlength2  = 60.&lt;/P&gt;&lt;P&gt;  watreedisplay-tcolor2    = 1.&lt;/P&gt;&lt;P&gt;  APPEND watreedisplay TO itreedisplay.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  LOOP AT ilocclasses ASSIGNING &amp;lt;waclass&amp;gt;.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Main Class.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    watreedisplay-tlevel = '2'.&lt;/P&gt;&lt;P&gt;    watreedisplay-text2 = &amp;lt;waclass&amp;gt;-clsname.&lt;/P&gt;&lt;P&gt;    watreedisplay-tcolor2    = 1.&lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Description&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;    watreedisplay-tcolor3    = 1.&lt;/P&gt;&lt;P&gt;    watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;    CONCATENATE `Class:    ` &amp;lt;waclass&amp;gt;-descript INTO watreedisplay-text3&lt;/P&gt;&lt;P&gt;    .&lt;/P&gt;&lt;P&gt;    APPEND watreedisplay TO itreedisplay.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  fill in the tree with method information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;waclass&amp;gt;-imethods[] ASSIGNING &amp;lt;wamethod&amp;gt;.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 =  &amp;lt;wamethod&amp;gt;-cmpname.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 2.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 2.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      CONCATENATE `Method:   ` &amp;lt;wamethod&amp;gt;-descript INTO&lt;/P&gt;&lt;P&gt;      watreedisplay-text3.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  fill in the tree with message information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    SORT &amp;lt;waclass&amp;gt;-imessages[] ASCENDING BY arbgb.&lt;/P&gt;&lt;P&gt;    LOOP AT &amp;lt;waclass&amp;gt;-imessages ASSIGNING &amp;lt;wamessage&amp;gt;.&lt;/P&gt;&lt;P&gt;      AT NEW arbgb.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlevel = 3.&lt;/P&gt;&lt;P&gt;        watreedisplay-text2 = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor2    = 5.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor3    = 5.&lt;/P&gt;&lt;P&gt;        watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;      Select the message class text if we do not have it already&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;        IF &amp;lt;wamessage&amp;gt;-stext IS INITIAL.&lt;/P&gt;&lt;P&gt;          SELECT SINGLE stext FROM t100a&lt;/P&gt;&lt;P&gt;                              INTO &amp;lt;wamessage&amp;gt;-stext&lt;/P&gt;&lt;P&gt;                              WHERE arbgb = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;        ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;        watreedisplay-text3 = &amp;lt;wamessage&amp;gt;-stext.&lt;/P&gt;&lt;P&gt;        CONCATENATE `Message class: `  watreedisplay-text3 INTO&lt;/P&gt;&lt;P&gt;        watreedisplay-text3.&lt;/P&gt;&lt;P&gt;        APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;      ENDAT.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  fill in the tree with dictionary information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT &amp;lt;waclass&amp;gt;-idictstruct ASSIGNING &amp;lt;wadictionary&amp;gt;.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 =  &amp;lt;wadictionary&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      CONCATENATE `Dictionary:    ` &amp;lt;wadictionary&amp;gt;-tabletitle INTO&lt;/P&gt;&lt;P&gt;      watreedisplay-text3.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;  Function Modules&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;    LOOP AT ilocfunctions ASSIGNING &amp;lt;wafunction&amp;gt; WHERE programlinkname =&lt;/P&gt;&lt;P&gt;    &amp;lt;waclass&amp;gt;-clsname.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlevel = 3.&lt;/P&gt;&lt;P&gt;      watreedisplay-text2 = &amp;lt;wafunction&amp;gt;-functionname.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor2    = 7.&lt;/P&gt;&lt;P&gt;      watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;      watreedisplay-tcolor3    = 7.&lt;/P&gt;&lt;P&gt;      watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;      CONCATENATE `Function:      ` &amp;lt;wafunction&amp;gt;-functionname INTO&lt;/P&gt;&lt;P&gt;      watreedisplay-text3.&lt;/P&gt;&lt;P&gt;      APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    Fill in the tree with include information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      LOOP AT &amp;lt;wafunction&amp;gt;-iincludes ASSIGNING &amp;lt;wainclude&amp;gt;.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlevel = 4.&lt;/P&gt;&lt;P&gt;        watreedisplay-text2 =  &amp;lt;wainclude&amp;gt;-includename.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor2    = 4.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor3    = 4.&lt;/P&gt;&lt;P&gt;        watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;        CONCATENATE `Include:       ` &amp;lt;wainclude&amp;gt;-includetitle INTO&lt;/P&gt;&lt;P&gt;        watreedisplay-text3.&lt;/P&gt;&lt;P&gt;        APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;      ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    fill in the tree with dictionary information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      LOOP AT &amp;lt;wafunction&amp;gt;-idictstruct ASSIGNING &amp;lt;wadictionary&amp;gt;.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlevel = 4.&lt;/P&gt;&lt;P&gt;        watreedisplay-text2 =  &amp;lt;wadictionary&amp;gt;-tablename.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor2    = 3.&lt;/P&gt;&lt;P&gt;        watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;        watreedisplay-tcolor3    = 3.&lt;/P&gt;&lt;P&gt;        watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt;        CONCATENATE `Dictionary:    ` &amp;lt;wadictionary&amp;gt;-tabletitle INTO&lt;/P&gt;&lt;P&gt;        watreedisplay-text3.&lt;/P&gt;&lt;P&gt;        APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;      ENDLOOP.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;    fill in the tree with message information&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;      SORT &amp;lt;wafunction&amp;gt;-imessages[] ASCENDING BY arbgb.&lt;/P&gt;&lt;P&gt;      LOOP AT &amp;lt;wafunction&amp;gt;-imessages ASSIGNING &amp;lt;wamessage&amp;gt;.&lt;/P&gt;&lt;P&gt;        AT NEW arbgb.&lt;/P&gt;&lt;P&gt;          watreedisplay-tlevel = 4.&lt;/P&gt;&lt;P&gt;          watreedisplay-text2 = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;          watreedisplay-tcolor2    = 5.&lt;/P&gt;&lt;P&gt;          watreedisplay-tlength3   = 80.&lt;/P&gt;&lt;P&gt;          watreedisplay-tcolor3    = 5.&lt;/P&gt;&lt;P&gt;          watreedisplay-tpos3      = 60.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;        Select the message class text if we do not have it already&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;          IF &amp;lt;wamessage&amp;gt;-stext IS INITIAL.&lt;/P&gt;&lt;P&gt;            SELECT SINGLE stext FROM t100a&lt;/P&gt;&lt;P&gt;                                INTO &amp;lt;wamessage&amp;gt;-stext&lt;/P&gt;&lt;P&gt;                                WHERE arbgb = &amp;lt;wamessage&amp;gt;-arbgb.&lt;/P&gt;&lt;P&gt;          ENDIF.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;          watreedisplay-text3 = &amp;lt;wamessage&amp;gt;-stext.&lt;/P&gt;&lt;P&gt;          CONCATENATE `Message class:  `  watreedisplay-text3 INTO&lt;/P&gt;&lt;P&gt;          watreedisplay-text3.&lt;/P&gt;&lt;P&gt;          APPEND watreedisplay TO iloctreedisplay.&lt;/P&gt;&lt;P&gt;        ENDAT.&lt;/P&gt;&lt;P&gt;      ENDLOOP.&lt;/P&gt;&lt;P&gt;    ENDLOOP.&lt;/P&gt;&lt;P&gt;  ENDLOOP.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"fillTreeNodeClasses&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;displayTree...&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="---------------------------" /&gt;&lt;P&gt;FORM displaytree USING iloctreedisplay LIKE itreedisplay[].&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;  DATA: watreedisplay TYPE snodetext.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;build up the tree from the internal table node&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL FUNCTION 'RS_TREE_CONSTRUCT'&lt;/P&gt;&lt;P&gt;    TABLES&lt;/P&gt;&lt;P&gt;      nodetab            = itreedisplay&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      tree_failure       = 1&lt;/P&gt;&lt;P&gt;      id_not_found       = 2&lt;/P&gt;&lt;P&gt;      wrong_relationship = 3&lt;/P&gt;&lt;P&gt;      OTHERS             = 4.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;get the first index and expand the whole tree&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  READ TABLE iloctreedisplay INTO watreedisplay INDEX 1.&lt;/P&gt;&lt;P&gt;  CALL FUNCTION 'RS_TREE_EXPAND'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      node_id   = watreedisplay-id&lt;/P&gt;&lt;P&gt;      all       = 'X'&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      not_found = 1&lt;/P&gt;&lt;P&gt;      OTHERS    = 2.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt;now display the tree&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;  CALL FUNCTION 'RS_TREE_LIST_DISPLAY'&lt;/P&gt;&lt;P&gt;    EXPORTING&lt;/P&gt;&lt;P&gt;      callback_program      = sy-cprog&lt;/P&gt;&lt;P&gt;      callback_user_command = 'CB_USER_COMMAND'&lt;/P&gt;&lt;P&gt;      callback_text_display = 'CB_text_DISPLAY'&lt;/P&gt;&lt;P&gt;      callback_top_of_page  = 'TOP_OF_PAGE'&lt;/P&gt;&lt;P&gt;    EXCEPTIONS&lt;/P&gt;&lt;P&gt;      OTHERS                = 1.&lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;"displayTree&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;UL&gt;&lt;LI level="1" type="ul"&gt;&lt;P&gt; topOfPage... for tree display routines.&lt;/P&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;*----&lt;/P&gt;&lt;HR originaltext="------------------------------------------------------------------" /&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;FORM topofpage.&lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;ENDFORM.                    "&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Vivek&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 24 Aug 2006 20:06:54 GMT</pubDate>
      <guid>https://community.sap.com/t5/application-development-and-automation-discussions/copying-abap-programs/m-p/1542541#M247060</guid>
      <dc:creator>Former Member</dc:creator>
      <dc:date>2006-08-24T20:06:54Z</dc:date>
    </item>
  </channel>
</rss>

