The RETURN instruction returns flow control to the function caller.
RETURN [ value [,...] ]
The RETURN instruction transfers the control back from a function with optional return values.
Record members can be returned with the .* or THRU notation. Each member is returned as an independent variable.
A function may have several RETURN points (not recommended in structured programming) but they must all return the same number of values.
The number of returned values must correspond to the number of variables listed in the RETURNING clause of the CALL statement invoking this function.
A function cannot return a static array, but can return the reference of a dynamic array.
MAIN
  DEFINE fname, lname VARCHAR(30)
  CALL foo(NULL) RETURNING fname, lname 
  DISPLAY fname CLIPPED, " ", upshift(lname) CLIPPED
  CALL foo(1) RETURNING forname, surname 
  DISPLAY fname CLIPPED, " ", upshift(lname) CLIPPED
END MAIN
FUNCTION foo(code)
  DEFINE code INTEGER
  DEFINE person RECORD
                 fname VARCHAR(30),
                 lname VARCHAR(30)
               END RECORD
  IF code IS NULL THEN
     RETURN NULL, NULL
  ELSE
     LET person.fname = "John"
     LET person.lname = "Smith"
     RETURN person.*
  END IF
END FUNCTION