Whenever form internally changes the value of a field that has the user edit field set to yes, it calls your user_edit routine with the type parameter set to U_CHANGED. The edit_name parameter points to the name specified in the edit field name field in the field description form. If the edit field name is blank, then the edit_name parameter points to the field name. The old_value parameter points to the original contents of the field. If there is no old value (when a new record is displayed, for example), the old_value parameter is NULL. The new_value parameter points to the current contents of the field (which could be the same as the original contents).
Form changes the value of a field in the following situations:
When a form is displayed or cleared
When a calculation changes the value of a field
When a user_edit routine changes the value of a field with swrite.
If your user_edit routine swrites to a field that has the user edit field set to yes, swrite recursively calls your user edit routine. If your user edit routine uses U_CHANGED and swrite, it should be careful about getting into infinite recursive loops.