Natural Program

The NATURAL sample program returns one or many records within a range from the Employee file.

For more information on how to use Adabas/Natural programs with the iWay Transaction Adapter for CICS, see Using Adabas/Natural Programs.

On Windows, the Natural sample program is located in:

C:\Program Files\iWay7\etc\samples\cics\natural

The following supporting files are provided:

/****************************************************************/              
/*  AASNATN - SAMPLE NATURAL PROGRAM FOR IWAY CICS ADAPTER.     */              
/*  RETURN ONE OR MANY RECORDS WITHIN A RANGE FROM THE EMPLOYEE */
/*  FILE.                                                       */
/*                                                              */ 
/*  NATURAL PROGRAMS RUNNING WITH THE IWAY CICS ADAPTER ARE     */              
/*  INVOKED INDIRECTLY VIA THE PROXY PROGRAM, AASNATC.          */ 
/*                                                              */
/*  ALL ACCESS TO INPUT/OUTPUT BUFFERS ARE HANDLED BY CALLS TO  */              
/*  THE DATA MOVER PROGRAM, AASSUBC, DESCRIBED BELOW.           */              
/*                                                              */              
/*  COMMUNICATION WITH THE DATA MOVER PROGRAMS REQUIRE THE      */              
/*  CONTROL BLOCK:                                              */              
/*        1 #REQUEST-PARMS                                      */              
/*          2 #FUNCTION      (A2)  GT,PT,LC,LI                  */              
/*          2 #OFFSET        (I2)  DATA OFFSET OF INPUT/OUTPUT  */              
/*          2 #LENGTH        (I2)  LENGTH OF DATA TO GET OR PUT */              
/*          2 #RESPONSE-CODE (I4)                               */              
/*          2 #ERR-MESSAGE   (A72)                              */                                           
/*                                                              */              
/*  THE IMPLEMENTED FUNCTIONS ARE:                              */              
/*  GT - GET INPUT BY OFFSET.                                   */              
/*       THE OFFSET MUST BE SET TO 0 FOR THE FIRST CALL ONLY!!  */              
/*       THE OFFSET IS INCREMENTED FOLLOWING EACH CALL BY THE   */              
/*       DATA MOVER PROGRAM                                     */              
/*       THE LENGTH OF THE REQUESTED DATA MUST BE PROVIDED FOR  */              
/*       EACH CALL.  IT SHOULD MATCH THE LENGTH OF THE AREA     */              
/*       PROVIDED TO RECEIVE THE INPUT DATA                     */              
/*       IE:  MOVE #FUNC-GT TO #FUNCTION                        */              
/*            MOVE 8 TO #LENGTH                                 */              
/*            MOVE 0 TO OFFSET  -  FIRST CALL ONLY              */              
/*            CALL 'AASSUBC' #FUNCTION #EMP-NUM1                */              
/*                                                              */              
/*            WHERE #EMP-NUM1 IS AN EIGHT BYTE FIELD            */              
/*                                                              */              
/*   PT - PUT OUTPUT BY OFFSET                                  */              
/*       THE OFFSET MUST BE SET TO 0 FOR THE FIRST CALL ONLY!!  */              
/*       THE OFFSET IS INCREMENTED FOLLOWING EACH CALL BY THE   */              
/*       DATA MOVER PROGRAM                                     */              
/*       THE LENGTH OF THE REQUESTED DATA MUST BE PROVIDED FOR  */              
/*       EACH CALL.  IT SHOULD MATCH THE LENGTH OF THE AREA     */              
/*       PROVIDED CONTAINING THE OUTPUT DATA                    */              
/*       IE:  MOVE #FUNC-PT TO #FUNCTION                        */              
/*            MOVE 8 TO #LENGTH                                 */              
/*            MOVE 0 TO OFFSET  -  FIRST CALL ONLY              */              
/*            CALL 'AASSUBC' #FUNCTION #EMP-NUM1                */              
/*                                                              */              
/*            WHERE #EMP-NUM1 IS AN EIGHT BYTE FIELD            */              
/*                                                              */              
/*   LI - GET LENGTH OF INPUT DATA                              */              
/*        UPDATES THE #LENGTH FIELD WITH THE TOTAL LENGTH OF ALL*/              
/*        INPUT PARMS.  NO OTHER PARMS ARE NEEDED               */              
/*        IE: MOVE #FUNC-LI TO #FUNCTION                        */              
/*            CALL 'AASSUBC' #FUNCTION                          */              
/*                                                              */              
/*                                                              */              
/*   LC - GET LENGTH OF COMMAREA USED TO SEND DATA.             */              
/*        UPDATES THE #LENGTH FIELD WITH THE COMMAREA LENGTH.   */              
/*        NO OTHER PARMS ARE NEEDED                             */              
/*        IE: MOVE #FUNC-LC TO #FUNCTION                        */              
/*            CALL 'AASSUBC' #FUNCTION                          */              
/*                                                              */              
/*  IMPLEMENTED RESPONSE-CODES:                                 */              
/*   0 - OPERATION COMPLETED SUCCESSFULLY                       */              
/*   4 - ENDDATA - OFFSET EXCEEDS END OF INPUT DATA.            */              
/*       INDICATES NO FURTHER INPUT IS AVAILABLE                */              
/*   8 - ENDBUFF - OFFSET + LENGTH IS GREATER THEN COMMAREA     */              
/*                                                              */              
/*  NOTE:                                                       */              
/*         ALWAYS USE THE FIRST FIELD OF A GROUP WHEN CALLING   */              
/*         DATA MOVER PROGRAMS.  NOTICE ALL CALLS ARE MADE WITH */              
/*         #FUNCTION NOT #REQUEST-PARMS.                        */              
/*                                                              */              
/*         ALL INPUT PARMS MUST BE PROCESSED BEFORE OUTPUT.     */              
/*--------------------------------------------------------------*/              
DEFINE DATA LOCAL                                                               
1 #FUNC-TYPE                                                                    
  2 #FUNC-GT (A2) INIT<'GT'>                                                    
  2 #FUNC-PT (A2) INIT<'PT'>                                                    
  2 #FUNC-LC (A2) INIT<'LC'>                                                    
  2 #FUNC-LI (A2) INIT<'LI'>                                                    
1 #REQUEST-PARMS                                                                
  2 #FUNCTION      (A2)  /*GT,PT,LC,LI                                          
  2 #OFFSET        (I2)  /*DATA OFFSET OF INPUT/OUTPUT                          
  2 #LENGTH        (I2)  /*LENGTH OF DATA TO GET OR PUT                         
  2 #RESPONSE-CODE (I4)                                                         
  2 #ERR-MESSAGE   (A72)                                                        
1 #PARMS                                                                        
  2 #EMP-NUM1      (A8)                                                         
  2 #EMP-NUM2      (A8)                                                         
1 EMPLOY-VIEW VIEW OF EMPLOYEES1                                                
  2 PERSONNEL-ID                                                                
  2 FIRST-NAME                                                                  
  2 NAME                                                                        
  2 MAR-STAT                                                                    
  2 SEX                                                                         
  2 BIRTH                                                                       
  2 DEPT                                                                        
  2 JOB-TITLE                                                                   
  2 CURR-CODE(1:5)                                                              
  2 SALARY(N9/1:5)                                                              
1 #ERROR-PARMS                                                                  
  2 #NATPROG (A8)                                                               
  2 #NATMSG  (A65)                                                              
  2 #NATERR  (A7)                                                               
END-DEFINE                                                                      
/* USE LI FUNCTION TO THE GET LENGTH OF INPUT PARAMETERS */                     
MOVE #FUNC-LI TO #FUNCTION                                                      
CALL 'AASSUBC' #REQUEST-PARMS                                                   
IF #LENGTH LT 16   /*REQUIRED FOR THIS PROGRAM*/                                
THEN  TERMINATE                                                                 
END-IF                                                                          
/* USE GET FUNCTION TO RETRIEVE DATA PARMS */                                   
MOVE 8 TO #LENGTH                                                               
MOVE 0 TO #OFFSET                                                               
MOVE #FUNC-GT TO #FUNCTION                                                      
CALL 'AASSUBC' #FUNCTION #EMP-NUM1                                              
CALL 'AASSUBC' #FUNCTION #EMP-NUM2                                              
MOVE 0 TO #OFFSET                                                               
MOVE 147 TO #LENGTH                                                             
MOVE #FUNC-PT TO #FUNCTION                                                      
FIND ALL EMPLOY-VIEW WITH PERSONNEL-ID = #EMP-NUM1 THRU #EMP-NUM2               
  IF NO RECORDS FOUND                                                           
     MOVE *PROGRAM  TO  #NATPROG                                                
     MOVE ' REQUESTED EMPLOYEE NUMBERS NOT IN THE DATABASE' TO #NATMSG          
     MOVE 80 TO #LENGTH                                                         
     MOVE #FUNC-PT TO #FUNCTION                                                 
     CALL 'AASSUBC' #FUNCTION  #NATPROG                                         
     TERMINATE                                                                  
  END-NOREC                                                                     
  CALL 'AASSUBC' #FUNCTION PERSONNEL-ID                                         
END-FIND                                                                        
ON ERROR                                                                        
   MOVE *PROGRAM  TO  #NATPROG                                                  
   DECIDE FOR FIRST CONDITION                                                   
     WHEN *ERROR-NR = 1106                                                      
           MOVE ' EMPLOYEE NUMBER IS TOO LARGE. 8 BYTES IS '                    
             TO #NATMSG                                                         
           MOVE 'THE MAX' TO #NATERR                                            
     WHEN *ERROR-NR = 3061                                                      
           MOVE ' INVALID EMPLOYEE NUMBER RANGE SPECIFIED  '                    
             TO #NATMSG                                                         
           MOVE '       ' TO #NATERR                                            
     WHEN NONE                                                                  
          MOVE ' HAS DETECTED THE FOLLOWING ERROR NUMBER: '                     
            TO #NATMSG                                                          
          MOVE *ERROR-NR TO #NATERR                                             
   END-DECIDE                                                                   
   MOVE 80 TO #LENGTH                                                           
   CALL 'AASSUBC' #FUNCTION #NATPROG                                            
   TERMINATE                                                                    
END-ERROR                                                                       
END                                                                         

iWay Software