************************************************************************
* Yet another logon screen modification solution.
* This one is similar to program #90 (same setup steps) but:
* - it runs during logon but also can be run any time from SAP from the
*   help menu
* - it displays a list type window with active elements. By clicking
*   on those elements the user can start a report, an SAP transaction
*   or a web browser displaying a particular web page.
* - the format (color, element type, intensified, program to run ...)
*   for the dynamic logon screen for the different SAP systems is 
*   configured in a single config file residing on a filesystem shared 
*   between all SAP the systems.
*This is an example config file:
*
* SID|XX|YY|T|#|#|#|#|#|Text|URL
*  |  |  |  | | | | | |   |   |
*  |  |  |  | | | | | |   |  Url, Transaction or Program/type U,T or P
*  |  |  |  | | | | | |   Text to be displayed
*  |  |  |  | | | | | 1/0 Input on/off
*  |  |  |  | | | | 1/0 Hotspot on/off
*  |  |  |  | | | 1/0 Inverse on/off
*  |  |  |  | | 1/0 Intensified on/off
*  |  |  |  | 0-7 Color
*  |  |  |  R:Regular, U:URL, T:Start transact., P:Start program
*  |  |  Y coordinate (<20)
*  |  X coordinate (<66)
*  System
*
*SID|1|1|R|6|0|0|0|0|                SID: SAP 3.1 Development|
*SID|2|3|R|2|1|0|0|0|This is the first line of the important message|
*SID|2|4|R|2|1|0|0|0|This is the second line of the important message|
*SID|2|5|R|2|1|0|0|0|This is the third line of the important message|
*SID|1|7|U|1|0|1|1|0|Click here for more info from the WEB|http://XXX
*SID|1|9|T|1|0|1|1|0|Click here to start transaction SICK|SICK
*SID|1|11|P|1|0|1|1|0|Click here to start program SHOWCOLO|SHOWCOLO
*SID|1|13|S|1|0|1|1|0|Send mail to the BASIS team|imre@kabai.com
*SID|1|18|R|2|0|1|0|0|To display this window from SAP go to Help/webhelp
*
***********************************************************************
FUNCTION Z_POPUP_SYSTEM_INFO_LIST.
*"----------------------------------------------------------------------
*"*"Local interface:
*"----------------------------------------------------------------------
  CALL SCREEN 333  STARTING AT 1 3
                   ENDING   AT 65 16.
ENDFUNCTION.
*---------------------------------------------------------------------*
*       MODULE STATUS_0333 OUTPUT                                     *
*---------------------------------------------------------------------*
MODULE STATUS_0333 OUTPUT.
  SET TITLEBAR '000'.
  INCLUDE .
  DATA: MESSAGE(20), L1(81), L2(81), L3(81), L4(81),
        L5(81), L6(81), L7(81), L8(81), L9(81).
  DATA: C.
  DATA: L(200), A1(81), A2(81), A3(81), A4(81), A5(81), A6(81).
  DATA: DESRCIPTION(6) VALUE 'Z|   |',
        SYSTEM_MESSAGE(6) VALUE 'M|   |'.
  DATA: BEGIN OF A.
          INCLUDE STRUCTURE RFCSI.
  DATA: END OF A.
  DATA: BEGIN OF LINE_TBL OCCURS 100.
          INCLUDE STRUCTURE SPFLIST.
  DATA: END OF LINE_TBL.
* Run only on my pc (good for the testing)
*  CALL FUNCTION 'RFC_SYSTEM_INFO' DESTINATION 'SAPGUI'
*  IMPORTING RFCSI_EXPORT = A.
*  IF A NS 'IMRE'.
*    EXIT.
*  ENDIF.
* Create the SID specific search patterns
  DESRCIPTION+2(3) = SY-SYSID.
  SYSTEM_MESSAGE+2(3) = SY-SYSID.
* Trick to avoid OPEN DATASET (no user->no authorization->open fails)
  CALL FUNCTION 'RZL_READ_FILE_LOCAL'
       EXPORTING
            DIRECTORY = '/globaldirectory'
            NAME      = 'login_screen_list.ctl'
       TABLES
            LINE_TBL  = LINE_TBL
       EXCEPTIONS
            NOT_FOUND = 1.
* If the file is missing: do not display anything
  IF SY-SUBRC = 1.
    SET SCREEN 0. LEAVE SCREEN.
  ENDIF.
* Get the text from the internal table
  SUPPRESS DIALOG.
  LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
  NEW-PAGE NO-TITLE NO-HEADING.
  DATA: SYS(3),X(2),Y(2),T, COL,INT,INV,HOT,INP,TXT(62),URL(60).
  LOOP AT LINE_TBL.
    IF LINE_TBL CS SY-SYSID.
      SPLIT LINE_TBL AT '|' INTO SYS X Y T COL INT INV HOT INP TXT URL.
*
      CASE COL.
        WHEN '1'. FORMAT COLOR 1.
        WHEN '2'. FORMAT COLOR 2.
        WHEN '3'. FORMAT COLOR 3.
        WHEN '4'. FORMAT COLOR 4.
        WHEN '5'. FORMAT COLOR 5.
        WHEN '6'. FORMAT COLOR 6.
        WHEN '7'. FORMAT COLOR 7.
      ENDCASE.
*
      FORMAT INTENSIFIED OFF.
      FORMAT INVERSE OFF.
      FORMAT HOTSPOT OFF.
      FORMAT INPUT OFF.
      IF HOT = '1'. FORMAT HOTSPOT ON. ENDIF.
      IF INT = '1'. FORMAT INTENSIFIED ON. ENDIF.
      IF INV = '1'. FORMAT INVERSE ON. ENDIF.
      IF INP = '1'. FORMAT INPUT ON. ENDIF.
*
      SKIP TO LINE Y.
      IF T = 'U'.
        WRITE AT X(2) ICON_SYSTEM_HELP AS ICON.
        X = X + 3.
        WRITE AT X TXT. HIDE: T, URL.
      ELSEIF T = 'T'.
        WRITE AT X(2) ICON_EXECUTE_OBJECT AS ICON.
        X = X + 3.
        WRITE AT X TXT. HIDE: T, URL.
      ELSEIF T = 'S'.
        WRITE AT X(2) ICON_MAIL AS ICON.
        X = X + 3.
        WRITE AT X TXT. HIDE: T, URL.
      ELSEIF T = 'P'.
        WRITE AT X(2) ICON_EXECUTE_OBJECT AS ICON.
        X = X + 3.
        WRITE AT X TXT. HIDE: T, URL.
      ELSE.
        WRITE AT X TXT.
      ENDIF.
*
    ENDIF.
  ENDLOOP.
  CLEAR: SYS, X, Y, T, COL, INT, INV, HOT, INP, TXT, URL.
ENDMODULE.
*
AT LINE-SELECTION.
  READ LINE SY-INDEX.
  DATA: LOCATION(200).
  IF T = 'U'.
    CALL FUNCTION 'REGISTRY_GET'
         EXPORTING
              KEY     = 'protocol\StdFileEditing\server'
              SECTION = 'NetscapeMarkup'
         IMPORTING
              VALUE   = LOCATION.
    IF LOCATION IS INITIAL.
      MESSAGE ID 00 TYPE 'I' NUMBER 208
      WITH 'Can not locate Netscape in the registry'.
      EXIT.
    ENDIF.
    CALL FUNCTION 'WS_EXECUTE'
         EXPORTING
              PROGRAM        = LOCATION
              COMMANDLINE    = URL
              INFORM         = ''
         EXCEPTIONS
              FRONTEND_ERROR = 1
              NO_BATCH       = 2
              PROG_NOT_FOUND = 3
              ILLEGAL_OPTION = 4.
    IF SY-SUBRC <> 0.
      MESSAGE ID 00 TYPE 'I' NUMBER 208
      WITH 'Can not start Netscape on your pc'.
      EXIT.
    ENDIF.
  ELSEIF T = 'T' AND NOT SY-UNAME IS INITIAL.
    CALL TRANSACTION URL.
  ELSEIF T = 'P' AND NOT SY-UNAME IS INITIAL.
    SUBMIT (URL) AND RETURN.
  ELSEIF T = 'S' AND NOT SY-UNAME IS INITIAL.
*
  ENDIF.
*---------------------------------------------------------------------*
*       MODULE USER_COMMAND_0333 INPUT                                *
*---------------------------------------------------------------------*
MODULE USER_COMMAND_0333 INPUT.
ENDMODULE.
*---------------------------------------------------------------------*
*       MODULE STATUS_0222 OUTPUT                                     *
*---------------------------------------------------------------------*
MODULE STATUS_0222 OUTPUT.
  CALL FUNCTION 'Z_POPUP_SYSTEM_INFO_LIST'.
ENDMODULE.