REPORT ZHELLO7 MESSAGE-ID 00.

TABLES T005T.

DATA: greeting(20) VALUE 'Hello World',
      sel_cont(20),  "selected continent
      string1(21),   "dummy string variable
      string2(72),   "dummy string variable
      cfield(80),    "field the cursor is on
      ret_button1(10) VALUE '++++++++++', "screen return button
      ret_button2(10) VALUE '+ RETURN +'. "screen return button

DATA: BEGIN OF loc OCCURS 20, "locations itab with three fields
        continent(20),        "continent name
        nat(20),              "nation/country name
        cap(20),              "capitol city of the nation/country
      END OF loc.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME. "3.0
SELECT-OPTIONS s_land1 FOR T005T-Land1.
SELECTION-SCREEN ULINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN BEGIN OF LINE.
  SELECTION-SCREEN COMMENT 5(36) TEXT-001.
  PARAMETERS color TYPE N.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK b1.    "3.0

START-OF-SELECTION.
  PERFORM build_loc. "populate loc with names
  PERFORM level0.

AT LINE-SELECTION.
  GET CURSOR FIELD cfield.
  IF cfield CS 'ret_button'.
    SET USER-COMMAND 'BACK'.
  ELSE.
    CASE SY-LSIND.
      WHEN 1. PERFORM level1.
      WHEN 2. PERFORM level2.
      WHEN 3. PERFORM level3.
    ENDCASE.
  ENDIF.
  CLEAR cfield.

AT SELECTION-SCREEN ON color.
  IF color LT 1 OR color GT 7.
    MESSAGE E208 WITH 'Color value must be between 1 and 7'.
  ENDIF.

AT SELECTION-SCREEN ON s_land1.
  IF s_land1 IS INITIAL.
    MESSAGE E208 WITH 'Enter at least one country code'.
  ENDIF.

TOP-OF-PAGE.
  WRITE: 'Demo program - First page'.
  PERFORM return_button.

TOP-OF-PAGE DURING LINE-SELECTION.
  WRITE: 'Demo program - Page', SY-PAGNO.
  PERFORM return_button.

FORM build_loc.
  loc-continent = 'North America'.
  loc-nat = 'Canada'.         loc-cap = 'Ottawa'.       APPEND loc.
  loc-nat = 'United States'.  loc-cap = 'Washington'.   APPEND loc.
  loc-nat = 'Mexico'.         loc-cap = 'Mexico'.       APPEND loc.

  loc-continent = 'South America'.
  loc-nat = 'Venezuela'.      loc-cap = 'Caracas'.      APPEND loc.
  loc-nat = 'Colombia'.       loc-cap = 'Bogota'.       APPEND loc.
  loc-nat = 'Ecuador'.        loc-cap = 'Quito'.        APPEND loc.
  loc-nat = 'Peru'.           loc-cap = 'Lima'.         APPEND loc.
  loc-nat = 'Bolivia'.        loc-cap = 'La Paz'.       APPEND loc.
  loc-nat = 'Chile'.          loc-cap = 'Santiago'.     APPEND loc.
  loc-nat = 'Argentina'.      loc-cap = 'Buenos Aires'. APPEND loc.
  loc-nat = 'Uruguay'.        loc-cap = 'Montevideo'.   APPEND loc.
  loc-nat = 'Paraguay'.       loc-cap = 'Asuncion'.     APPEND loc.
  loc-nat = 'Brazil'.         loc-cap = 'Brasilia'.     APPEND loc.

  loc-continent = 'Western Europe'.
  loc-nat = 'United Kingdom'. loc-cap = 'London'.       APPEND loc.
  loc-nat = 'Ireland'.        loc-cap = 'Dublin'.       APPEND loc.
  loc-nat = 'Norway'.         loc-cap = 'Oslo'.         APPEND loc.
  loc-nat = 'Sweden'.         loc-cap = 'Stockholm'.    APPEND loc.
  loc-nat = 'Finland'.        loc-cap = 'Helsinki'.     APPEND loc.
  loc-nat = 'Denmark'.        loc-cap = 'Copenhagen'.   APPEND loc.
  loc-nat = 'Netherlands'.    loc-cap = 'The Hague'.    APPEND loc.
  loc-nat = 'Belgium'.        loc-cap = 'Brussels'.     APPEND loc.
  loc-nat = 'France'.         loc-cap = 'Paris'.        APPEND loc.
  loc-nat = 'Spain'.          loc-cap = 'Madrid'.       APPEND loc.
  loc-nat = 'Portugal'.       loc-cap = 'Lisbon'.       APPEND loc.
  loc-nat = 'Italy'.          loc-cap = 'Rome'.         APPEND loc.
  loc-nat = 'Austria'.        loc-cap = 'Vienna'.       APPEND loc.
  loc-nat = 'Switzerland'.    loc-cap = 'Bern'.         APPEND loc.
  loc-nat = 'Germany'.        loc-cap = 'Bonn'.         APPEND loc.
ENDFORM. "build_loc

FORM level0.
  WRITE greeting.
ENDFORM. "level0

FORM level1.
  IF cfield CS 'greeting'.
    CLEAR loc.
    LOOP AT loc.
      AT NEW continent.
        WRITE /12 loc-continent.
        HIDE loc-continent.
      ENDAT.
    ENDLOOP.
    CLEAR loc.
    WRITE /12 'Country list'.
  ENDIF.
ENDFORM. "level1

FORM level2.
  IF SY-LISEL CS 'Country list'.
    WRITE: 15 '--Country-------------', /15 'Code   Name'.
    ULINE /15(22).
    SELECT * FROM T005T
        WHERE Spras EQ SY-LANGU
        AND Land1 IN s_land1.
      WRITE: /15 T005T-Land1, T005T-Landx.
      HIDE: T005T-Landx, T005T-Natio.
    ENDSELECT.
  ELSEIF NOT loc-continent IS INITIAL.
    sel_cont = SY-LISEL+11.
    WRITE /12 sel_cont.
    LOOP AT loc WHERE continent = sel_cont.
      WRITE /15 loc-nat.
      HIDE: loc-nat, loc-cap.
    ENDLOOP.
  ELSE.
    EXIT.
  ENDIF.
  CLEAR: loc, T005T.
ENDFORM. "level2

FORM level3.
  IF NOT loc IS INITIAL.
    CALL FUNCTION 'STRING_CONCATENATE'
         EXPORTING
              STRING1 = loc-cap
              STRING2 = '.'
         IMPORTING
              STRING = string1
         EXCEPTIONS
               TOO_SMALL = 01.
    string2 = 'The capitol of '.
    string2+18 = loc-nat.
    string2+38 = ' is '.
    string2+42 = string1.
    CLEAR loc.
  ELSEIF NOT T005T IS INITIAL.
    IF T005T-Natio IS INITIAL.
      CALL FUNCTION 'STRING_CONCATENATE'
           EXPORTING
                STRING1 = T005T-Landx
                STRING2 = '.'
           IMPORTING
                STRING = string1
           EXCEPTIONS
                 TOO_SMALL = 01.
      string2 = 'We don''t know about the people from '.
      string2+38 = string1.
    ELSE.
      CALL FUNCTION 'STRING_CONCATENATE'
           EXPORTING
                STRING1 = T005T-Natio
                STRING2 = '.'
           IMPORTING
                STRING = string1
           EXCEPTIONS
                 TOO_SMALL = 01.
      string2 = 'The people from '.
      string2+18 = T005T-Landx.
      string2+35 = ' are called '.
      string2+48 = string1.
    ENDIF.
    CLEAR T005T.
  ELSE.
    EXIT.
  ENDIF.
  CONDENSE string2.
  SKIP 5.
  PERFORM color_write USING string2.
ENDFORM. "level3

FORM color_write USING outstring.
  CASE color.
    WHEN 1. WRITE / outstring COLOR 1.
    WHEN 2. WRITE / outstring COLOR 2.
    WHEN 3. WRITE / outstring COLOR 3.
    WHEN 4. WRITE / outstring COLOR 4.
    WHEN 5. WRITE / outstring COLOR 5.
    WHEN 6. WRITE / outstring COLOR 6.
    WHEN 7. WRITE / outstring COLOR 7.
  ENDCASE.
ENDFORM. "color_write

FORM return_button.
  SKIP TO LINE 3.
  WRITE: 52 ret_button1 COLOR 3,
        /52 ret_button2 COLOR 3,
        /52 ret_button1 COLOR 3.
  IF SY-LSIND = 0.
    SKIP TO LINE 5.
  ELSE.
    SKIP TO LINE 3.
  ENDIF.
ENDFORM. "return_button