To detect userfunctions on the curve one must set the option Userfunctions on. The continuer has stored the handles to the userfunctions cds.curve_userf. First a call to UserInfo = contget(cds.options, 'UserfunctionsInfo', []) is made to get information of the userfunctions. A call to feval(cds.curve_userf, UserInfo, ids, x, v) then must return the evaluation of all userfunctions ids, whose information is in the structure UserInfo, at x (v is the tangent vector at x). As a second return argument it should return an array of all user function id's which could not be evaluated, if this array is not empty the stepsize will be decreased.
When a change of sign of a userfunction is detected, the userfunction i is processed at x. This is the point where the results (values of the userfunction) can be saved in the structure s.data which can be reused for further analysis.