| ESCAPE | 
 | TOP[REPOSITION] | 
 | 
| BOTTOM[(r)]
                                           [IMMEDIATE] | |||
| ROUTINE[IMMEDIATE] | |||
| MODULE[IMMEDIATE] | 
| ESCAPE | 
 | TOP[REPOSITION] | 
 | ||
| 
                                                    BOTTOM[(r)]
                                           [IMMEDIATE] | |||||
| ROUTINE[IMMEDIATE] | |||||
| MODULE[IMMEDIATE] | |||||
This document covers the following topics:
For explanations of the symbols used in the syntax diagram, see Syntax Symbols.
Related Statements:
 FIND |
                                    FOR |
                                    HISTOGRAM |
                                    PARSE XML |
                                    READ |
                                    READ RESULT SET
                                          (SQL)| READ WORK
                                          FILE | READLOB |
                                    REPEAT |
                                    SORT
 CALL |
                                    CALL FILE |
                                    CALL LOOP |
                                    CALLNAT |
                                    DEFINE SUBROUTINE |
                                    FETCH |
                                    PERFORM 
                     
Belongs to Function Group:
The ESCAPE statement is used to interrupt the linear
                            flow of execution of a processing loop or a routine.
               
With the keywords TOP, BOTTOM and
                            ROUTINE you indicate where processing is to continue when the
                            ESCAPE statement is encountered.
               
An ESCAPE TOP/BOTTOM statement, when encountered for
                            processing, will internally refer to the innermost active processing loop. The
                            ESCAPE statement need not be physically placed within the
                            processing loop.
               
If an ESCAPE TOP/BOTTOM statement is placed in a
                            routine (subroutine, subprogram, function, or a program invoked with
                            FETCH RETURN), the routine(s) entered during execution of the
                            processing loop will be terminated automatically.
               
More than one ESCAPE statement may be contained
                              within the same processing loop.
               
The execution of an ESCAPE statement may be based on
                              a logical condition. If an ESCAPE statement is encountered during
                              processing of an AT END OF DATA, AT BREAK or AT
                                 END OF PAGE block, the execution of the special condition block will be
                              terminated and ESCAPE processing will continue as required.
               
If an ESCAPE statement is encountered during
                              processing of an if-no-records-found condition, no loop-end processing will be
                              performed (equivalent to ESCAPE IMMEDIATE).
               
| Syntax Element | Description | 
|---|---|
| ESCAPE TOP | Top Option: 
 | 
| REPOSITION | Top Reposition Option: When an  At the same time,  
 | 
| ESCAPE BOTTOM | Bottom Option: 
 In reporting mode,  | 
| (r) | Statement Reference: Notation
                                                      A label or a reference number can only be specified if the
                                                   | 
| IMMEDIATE | Immediate Option: If you specify the keyword  | 
| ESCAPE ROUTINE | Routine Option: This option indicates that the current Natural routine,
                                                  which may have been invoked via a  In the case of a subroutine, processing will continue with the first statement after the statement used to invoke the subroutine. In the case of a main program, Natural command mode will be entered. All loops currently active within the routine will be
                                                  terminated and loop-end processing performed as well as final processing for
                                                  user-initiated ( | 
| ESCAPE MODULE | Module Option: This option indicates that the entire current program
                                                  level, with all internal subroutines, is to relinquish control. The control is
                                                  then returned to the object of the former program level. If  
 As with  | 
** Example 'ESCEX1': ESCAPE                                             
************************************************************************
DEFINE DATA LOCAL                                                       
1 EMPLOY-VIEW VIEW OF EMPLOYEES                                         
  2 CITY                                                                
  2 FIRST-NAME                                                          
  2 NAME                                                                
  2 AREA-CODE                                                           
  2 PHONE                                                               
*                                                                       
1 #CITY (A20) INIT <' '>                                                
1 #CNTL (A1)  INIT <' '>                                                
END-DEFINE                                                              
*                                                                       
REPEAT                                                                  
  INPUT 'ENTER VALUE FOR CITY:  ' #CITY                                 
      / 'OR ''.'' TO TERMINATE  '                                       
  IF #CITY = '.'                                                        
    ESCAPE BOTTOM                                                       
  END-IF                                                        
  /*                                                            
  FND. FIND EMPLOY-VIEW WITH CITY = #CITY                       
    /*                                                          
    IF NO RECORDS FOUND                                         
      WRITE 'NO RECORDS FOUND'                                  
      ESCAPE BOTTOM (FND.)                                      
    END-NOREC                                                   
    AT START OF DATA                                            
      INPUT (AD=O) 'RECORDS FOUND:' *NUMBER //                  
                   'ENTER ''D'' TO DISPLAY RECORDS' #CNTL (AD=M)
      IF #CNTL NE 'D'                                           
        ESCAPE BOTTOM (FND.)                                    
      END-IF                                                    
    END-START                                                   
    /*                                                          
    DISPLAY NOTITLE NAME FIRST-NAME PHONE                       
  END-FIND                                                      
END-REPEAT 
                       ENTER VALUE FOR CITY: PARIS (OR '.' TO TERMINATE)
RECORDS FOUND: 26 ENTER 'D' TO DISPLAY RECORDS D
        NAME              FIRST-NAME         TELEPHONE   
-------------------- -------------------- ---------------
                                                         
MAIZIERE             ELISABETH            46758304       
MARX                 JEAN-MARIE           40738871       
REIGNARD             JACQUELINE           48472153       
RENAUD               MICHEL               46055008       
REMOUE               GERMAINE             36929371       
LAVENDA              SALOMON              40155905       
BROUSSE              GUY                  37502323       
GIORDA               LOUIS                37497316       
SIECA                FRANCOIS             40487413       
CENSIER              BERNARD              38070268       
DUC                  JEAN-PAUL            38065261       
CAHN                 RAYMOND              43723961       
MAZUY                ROBERT               44286899       
FAURIE               HENRI                44341159       
VALLY                ALAIN                47326249       
BRETON               JEAN-MARIE           48467146       
GIGLEUX              JACQUES              40477399       
KORAB-BRZOZOWSKI     BOGDAN               45288048       
XOLIN                CHRISTIAN            46060015       
LEGRIS               ROGER                39341509       
VVVV