4.3.10 Generalized Subroutine

The "demand" subroutines described in the previous examples can be generalized and used for any file.

Consider a "generalized" FETCH command like this:

FETCH   FIELDS(#FIELD1 #FIELD2 ... #FIELDn) FROM_FILE(FILE) 

        WITH_KEY(#KEY1 ... #KEYn)

 

This can be replaced by executing a "demand" subroutine that exactly emulates the FETCH command like this:

EXECUTE SUBROUTINE(GET_FILE) WITH_PARMS(#KEY1 ... #KEYn)

 

The actual "demand" subroutine in generalized format would look like this:

SUBROUTINE NAME(GET_FILE) PARMS((#GETKEY1 *RECEIVED)

                                    "         "

                                (#GETKEYn *RECEIVED))

 

DEFINE FIELD(#GETKEY1) REFFLD(#KEY1)

   "     "      "           "

DEFINE FIELD(#GETKEYn) REFFLD(#KEYn)

 

DEF_LIST   NAME(#FILE) 

           FIELDS(#KEY1 ... #KEYn #FIELD1 ... #FIELDn)

           TYPE(*WORKING) ENTRYS(as required)

 

LOC_ENTRY  IN_LIST(#FILE) WHERE('(#KEY1 = #GETKEY1) *AND

                                    "         "       "

                                 (#KEYn = #GETKEYn)')

 

IF_STATUS  IS_NOT(*OKAY)

FETCH   FIELDS(#FIELD1 #FIELD2 ... #FIELDn) FROM_FILE(FILE)

        WITH_KEY(#GETKEY1 ... #GETKEYn)

ADD_ENTRY  TO_LIST(#FILE)

ENDIF

Points to Note: