Test268 Section 3

From MidrangeWiki
Revision as of 10:48, 18 January 2006 by Igor.beslic@zg.htnet.hr (talk | contribs) (Code and use *INZSR)
Jump to: navigation, search

<< Previous Section | Home | Next Section >>

Section 3 - Core RPG (15%)

Recognize appropriate use of RPG creation commands (e.g., CRTxxxPGM, CRTxxxMOD, CRTPGM, CRTBNDxxx)

  • CRTxxxPGM
    • Used for compiling a RPG OPM program .
  • CRTxxxMOD
    • Used for compiling a RPG ILE 4 module. It will create a non exectutable *module object.
  • CRTPGM
    • Used for linking one or more modules to create a program. It will create a executale *pgm object.
  • CRTBNDxxx
    • Used for comiling a RPG ILE 4 program. When the source is compiled, it will create a module in QTEMP and then create a program from it and finally deletes the module.

Define basic arrays (e.g., compile time, pre-run time, run time) using D specs

Compile Time

DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++
DARC              S              3A   DIM(12) PERRCD(5) CTDATA

// Must be at the end of the code
**CTDATA ARC
48K16343J64044HComments can be placed here
12648A47349K346Comments can be placed here
50B125         Comments can be placed here

Pre-Run Time

Figure 68 shows the definition specifications required for two prerun-time arrays, a compile-time array, and a run-time array. Figure 68. Definition Specifications for Different Types of Arrays

HKeywords+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
H DATFMT(*USA) TIMFMT(*HMS)
D*ame+++++++++++ETDsFrom+++To/L+++IDc.Keywords++++++++++++++++++++
 * Run-time array.  ARI has 10 elements of type date. They are
 * initialized to September 15, 1994.  This is in month, day,
 * year format using a slash as a separator as defined on the
 * control specification.
DARI              S               D   DIM(10) INZ(D'09/15/1994')
 *
 * Compile-time arrays in alternating format.  Both arrays have
 * eight elements (three elements per record).  ARC is a character
 * array of length 15, and ARD is a time array with a predefined
 * length of 8.
DARC              S             15    DIM(8) PERRCD(3)
D                                     CTDATA
DARD              S               T   DIM(8) ALT(ARC)
 *
 * Prerun-time array.  ARE, which is to be read from file DISKIN,
 * has 250 character elements (12 elements per record).  Each
 * element is five positions long.  The size of each record
 * is 60 (5*12). The elements are arranged in ascending sequence.
DARE              S              5A   DIM(250) PERRCD(12) ASCEND
D                                     FROMFILE(DISKIN)
 *
 * Prerun-time array specified as a combined file.  ARH is written
 * back to the same file from which it is read when the program
 * ends normally with LR on.  ARH has 250  character elements
 * (12 elements per record).  Each elements is five positions long.
 * The elements are arranged in ascending sequence.
DARH              S              5A   DIM(250) PERRCD(12) ASCEND
D                                     FROMFILE(DISKOUT)
D                                     TOFILE(DISKOUT)

// Must be at the end of the code
**CTDATA ARC
Toronto        12:15:00Winnipeg       13:23:00Calgary        15:44:00
Sydney         17:24:30Edmonton       21:33:00Saskatoon      08:40:00
Regina         12:33:00Vancouver      13:20:00

Run Time

DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++
DARC              S              3A   DIM(12)

Use basic array handling (e.g., *IN, LOOKUP, SORTA, MOVE and MOVEA, indexing)

Code and use figurative constants (e.g., *LOVAL, *HIVAL, *ALL, *BLANKS, *ZEROS, *ON, *OFF)

  • *ALL
  • *BLANKS -- Fills an alpha field with ' '
  • *HIVAL -- Fills a field with the highest possible value the field can hold
  • *LOVAL -- Fills a field with the lowest possible value the field can hold
  • *OFF -- Generally used for indicators to either turn them off or check to see if they are off
  • *ON -- Generally used for indicators to either turn them on or check to see if they are on
  • *ZEROS -- Fills a numeric field with 0

Code and use job date and system date

Job Date

System Date

Code and use structured operation codes (e.g., DO, DOUxx, DOWxx, IF/ELSE/ELSEIF, SELECT/WHEN, CASxx/EXSR)

DO

DOUxx

DOWxx

dow not %eof();
  // process
enddo;

IF/ELSE/ELSEIF

if mycondition;
  // the code
else;
  // other condition
endif;
if mycondition;
  // the code
elseif new condition;
  // new code
endif;

SELECT/WHEN

       select;                                                                                     
                                                                                                   
         when %trim(MonthName) = 'January' or                                                      
              %trim(MonthName) = 'JANUARY';                                                        
           return 1;                                                                               
                                                                                                   
         when %trim(MonthName) = 'February' or                                                     
              %trim(MonthName) = 'FEBRUARY';                                                       
           return 2;                                                                               
                                                                                                   
         when %trim(MonthName) = 'March' or                                                        
              %trim(MonthName) = 'MARCH';                                                          
           return 3;                                                                               
                                                                                                   
         when %trim(MonthName) = 'April' or                                                        
              %trim(MonthName) = 'APRIL';                                                          
           return 4;                                                                               
                                                                                                   
         when %trim(MonthName) = 'May' or                                                          
              %trim(MonthName) = 'MAY';                                                            
           return 5;                                                                               
                                                                                                   
         when %trim(MonthName) = 'June' or                                                         
              %trim(MonthName) = 'JUNE';                                                           
           return 6;                                                                               
                                                                                                   
         when %trim(MonthName) = 'July' or                                                         
              %trim(MonthName) = 'JULY';                                                           
           return 7;                                                                               
                                                                                                   
         when %trim(MonthName) = 'August' or                                                       
              %trim(MonthName) = 'AUGUST';                                                         
           return 8;                                                                               
                                                                                                   
         when %trim(MonthName) = 'September' or                                                    
              %trim(MonthName) = 'SEPTEMBER';                                                      
           return 9;                                                                               
                                                                                                   
         when %trim(MonthName) = 'October' or                                                      
              %trim(MonthName) = 'OCTOBER';                                                        
           return 10;                                                                              
                                                                                                   
         when %trim(MonthName) = 'November' or                                                     
              %trim(MonthName) = 'NOVEMBER';                                                       
           return 11;                                                                              
                                                                                                   
         when %trim(MonthName) = 'December' or                                                     
              %trim(MonthName) = 'DECEMBER';                                                       
           return 12;                                                                              
                                                                                                   
         other;                                                                                    
           return -1;                                                                              
                                                                                                   
       endsl;

CASxx/EXSR

Code and use structured operation codes with expressions (+, -, * ,/, **, <, >, =, (), and, or, not)

  • Addition
result = field1 + field2;
  • Subtraction
result = field1 - feild2;
  • Multiplication
result = field1 * field2;
  • Division
result = field1 / field2;
  • **

Ed - What is this??

result = field1 ** field2;
  • Less Than
if field1 < field2;
  // my code here
endif;
  • Greater Than
if field1 > field2;
  // my code here
endif;
  • Equal
if field1 = field2;
  // my code here
endif;
  • Parenthesis
result = (field1 + field2) * field3;
  • And
if field1 > field2 and field3 > field4;
  // my code here
endif;
  • Or
if field1 > field2 or field3 > field4;
  // my code here
endif;
  • not
if field1 > field2 and not field3 > field4;
  // my code here
endif;

Code and use date data types and arithmetic operations, including date operations in expressions

Code and use SDS

See Program Status Data Structure

Code and use *INZSR

'*INZSR' is automatically run before any other mainline code.

begsr *inzsr;
  // code for the *inzsr here
endsr  //*inzsr;
NOTE
  • *INZSR can be defined only for MAIN subprocedure
  • RESET operation cant be used in *INZSR
  • If program returns with *INLR=*OFF, *INZSR will not be executed on next program invocation.
  • If program returns with *INLR=*OFF but *INZSR wasn't completed normaly, it will be executed on next program invocation.
  • If *INZSR is coded inside bounded module
    • it will be called only if MAIN subprocedure is called first.
    • if other subprocedure is called first only initalization of global storage occures.

Code and use RPG IV built-in functions

See Built In Functions

Use the H-spec keywords

See H-Spec Keywords

Use RPG IV OpCodes (e.g., Arithmetic, Date, Message, Array, Declarative, File, Branching, Indicator setting, String handling, Structured programming, compare, initialization, subroutine, data area)

Use the D-spec keywords

See D-Spec Keywords


<< Previous Section | Home | Next Section >>