Invokes a user-defined function. The AVM evaluates the name of the function (and the procedure handle, if any) at run time.
The following procedure demonstrates the DYNAMIC-FUNCTION function:
r-funfun.p
| /* Requires a connection to the Sports2000 database. Define data items */
DEFINE VARIABLE funcs   AS CHARACTER NO-UNDO EXTENT 5 
  INITIAL ["firstrec","lastrec","nextrec","prevrec","quitting"].
DEFINE VARIABLE action  AS CHARACTER NO-UNDO LABEL "Action" FORMAT "x" 
  INITIAL "N".
DEFINE VARIABLE idx     AS INTEGER   NO-UNDO.
DEFINE VARIABLE alldone AS LOGICAL   NO-UNDO.
FORM WITH FRAME x SIDE-LABELS 2 COLUMNS 1 DOWN COLUMN 25.
/* Define user-defined functions */
FUNCTION dispcust RETURNS LOGICAL:
  DISPLAY Customer EXCEPT Customer.Comments WITH FRAME x.
END.
FUNCTION firstrec RETURNS LOGICAL:
  FIND FIRST Customer.
  dispcust().
  RETURN yes.
END.
FUNCTION lastrec RETURNS LOGICAL:
  FIND LAST Customer.
  dispcust().
  RETURN yes.
END.
FUNCTION nextrec RETURNS LOGICAL:
  FIND NEXT Customer NO-ERROR.
  IF AVAILABLE Customer THEN
     dispcust().
  RETURN AVAILABLE(Customer).
END.
FUNCTION prevrec RETURNS LOGICAL:
  FIND PREV Customer NO-ERROR.
  IF AVAILABLE Customer THEN
     dispcust().
  RETURN AVAILABLE(Customer).
END.
FUNCTION quitting RETURNS LOGICAL:
  alldone = yes.
  RETURN no.
END
/* Main routine */
REPEAT WHILE NOT alldone:
  UPDATE action HELP 
    "Enter F(irst), L(ast), N(ext), P(rior), or Q(uit) to navigate.".
  idx = LOOKUP(action,"f,l,n,p,q").
  IF idx EQ 0 THEN DO:
    MESSAGE "Enter F(irst), L(ast), N(ext), P(rior), or Q(uit)" 
      VIEW-AS ALERT-BOX.
    NEXT.
  END.
  DISPLAY DYNAMIC-FUNCTION(funcs[idx]) LABEL "Record Found?".
END. |