### User functions

To detect zeros of 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 on 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.

A special point on a bifurcation curve that is specified by a user function has a structure as follows:

`s.index` | index of the detected singular point defined by the user function.
`s.label` | a string that is in `UserInfo.label`, label of the singularity.
`s.msg` | a string that is set in `UserInfo.name`.
`s.data` | an empty tangent vector or values of the user functions in the singular point.

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.