Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Example of an optimized procedure

&pagelevel(3)&pagelevel

The following example shows a procedure to which all optimizations mentioned in the previous sections were applied. The optimized procedure (created by the “BS2000 Performance Controlling and Modelling” team) requires only 62% of the CPU time needed by the initial version of the procedure that was written using the lower performance syntax.

Optimized procedure (recommended syntax):

/SET-PROCEDURE-OPTIONS
/
/OPEN-VARIABLE-CONTAINER CONTAINER-NAME=CONTFS, -
/                        FROM-FILE=*LIBRARY-ELEMENT(LIBRARY=BAD.LIB)
/DECLARE-VARIABLE VARIABLE-NAME=C-FS-L(TYPE=*STRUCTURE) - 
/               , MULTIPLE-ELEMENTS=*LIST, CONTAINER=CONTFS
/
/&* The list variables and the output of show-file-attr
/ DECLARE-VARIABLE VARIABLE-NAME = ( -
/         LIST   ( TYPE = *STRING    ), -
/         TSIL   ( TYPE = *STRING    ), -
/         FS-OUT ( TYPE = *STRUCTURE ), -
/         ), MULTIPLE-ELEMENTS=*LIST
/
/&* List initialization
/ LIST = *STRING-TO-VAR ( '(ABC,DEF,GHI,JKL,MNO,ABC,DEF,GHI,JKL,MNO)' )
/
/&* List in reverse order
/ FOR I = *LIST(LIST)
/   TSIL = I, *PREFIX
/ END-FOR
/
/&* Show list variable in one command
/ SHOW-VARIABLE VARIABLE-NAME = ( LIST, TSIL )
/
/&* Search variable A inside LIST and save the result in B
/ A = 'I'
/ IND = SEARCH-LIST-INDEX('LIST', '^&A.$', PATTERN-TYPE=*REGULAR-EXPRESSION)
/ IF ( IND <> 0 )
/  B = LIST#IND
/ END-IF
/
/&* Get all files beginning with 'A'
/ EXECUTE-CMD CMD = (/SHOW-FILE-ATTRIBUTES A*) -
/           , STRUCTURE-OUTPUT = FS-OUT -
/           , TEXT-OUTPUT = *NONE
/
/&* Put contents in a container
/ C-FS-L = FS-OUT
/
/&* Calculate total size
/ TSIZE = 0
/ FOR I = *COUNTER( 1, SIZE('FS-OUT'), 1 )
/   TSIZE = TSIZE + FS-OUT#I.F-SIZE
/ END-FOR
/
/&* Save container (close implicit at procedure end )
/ SAVE-VARIABLE-CONTAINER CONTAINER-NAME = CONTFS
/
/&* Display date, time and total file size
/ WRITE-TEXT -
/   'Today &(DATE()) at &(TIME()) we have a total file size of &TSIZE -
/    on user-id &(USER-ID())..'
/
/EXIT-PROCEDURE

Initial procedure (less recommended syntax):

/SET-PROC-OPT
/
/OP-VAR-CONT CONTFS, *L(BAD.LIB)
/DECL-VAR C-FS-L,TYP=STRUCT,MULT=*L,CONT=CONTFS
/
/REMARK  This list variable
/ DECL-VAR LIST ( TYP = STRI ),MULT=*L
/
/REMARK  Its initialization
/ SET-VAR LIST ='ABC', *EXTEND; SET-VAR LIST ='DEF', *EXTEND
/ SET-VAR LIST ='GHI', *EXTEND; SET-VAR LIST ='JKL', *EXTEND
/ SET-VAR LIST ='MNO', *EXTEND; SET-VAR LIST ='ABC', *EXTEND
/ SET-VAR LIST ='DEF', *EXTEND; SET-VAR LIST ='GHI', *EXTEND
/ SET-VAR LIST ='JKL', *EXTEND; SET-VAR LIST ='MNO', *EXTEND
/
/REMARK  List in reverse order
/ DECL-VAR TSIL (TYP=STRI), MULT=*L
/
/ FOR I = *C( SIZE('LIST'), 1, -1)
/   SET-VAR TSIL#&(SIZE('LIST') - I + 1) = LIST#&I
/ END-F
/
/REMARK  Show list variable
/ SH-VAR LIST
/ SH-VAR TSIL
/
/REMARK  Search variable A inside LIST
/ SET-VAR A = 'I'
/ SET-VAR FOUND = FALSE
/ FOR I=*C(1,SIZE('LIST'),1), COND=(NOT FOUND)
/  IF ( LIST#&I == A ) 
/    SET-VAR FOUND = TRUE
/  EN-IF
/ END-F
/
/REMARK  Save it in B
/ IF ( FOUND )
/   SET-VAR B = LIST#&I
/ EN-IF
/
/REMARK  Get all file beginning with 'A'
/ DECL-V FS-OUT ,TYP=STRU,MULT=*L
/ EXEC-CMD (/SH-FIL-ATTR A*),STR-OUTPUT=FS-OUT,TEXT-OUT=*NONE
/
/REMARK  Calculate total size and put contents in a container
/ SET-VAR TSIZE = 0
/ FOR I=*C(1,SIZE('FS-OUT'),1)
/  SET-VAR TSIZE = TSIZE + FS-OUT#&I..F-SIZE
/  SET-VAR C-FS-L#&I = FS-OUT#&I
/ END-F
/
/REMARK  Save the container
/ SAVE-VAR-CONT CONTFS
/
/REMARK  Close the container
/ CLOSE-VAR-C CONTFS
/
/REMARK Display date, time and total file size
/ TDATE = DATE
/ TTIME = TIME
/ 
/W-T 'Today (&TDATE) at &TTIME we have a total file size of &TSIZE -
/     on user-id &USER-ID..'
/
/EXIT-PROC