static void add_scaled_fxnodeline( struct FXNodeLines **tofxnodeline, struct FXNodeLines *nodeline1, struct FXNodeLines *nodeline2, Place p, Place subtract ){ struct FXNodeLines fxnodeline = *nodeline1; fxnodeline.l.p = p; R_ASSERT(p_Greater_Or_Equal(p, nodeline1->l.p)); R_ASSERT(p_Greater_Or_Equal(nodeline2->l.p, p)); if (nodeline1->logtype != LOGTYPE_HOLD) fxnodeline.val = scale(p_float(p), p_float(nodeline1->l.p), p_float(nodeline2->l.p), nodeline1->val, nodeline2->val); add_fxnodeline(tofxnodeline, &fxnodeline, subtract); }
/********************************************************************** FUNCTION Finds the first element in the list at or after place 'place' and counter 'counter' for dividor 'dividor'. If no element is found after 'place' and 'counter/dividor', NULL is returned. **********************************************************************/ void *ListFindElement3( const struct ListHeader3 *element, const Place *placement ){ for(;element!=NULL;element=element->next) if(p_Greater_Or_Equal(element->p,*placement)) return (void*)element; return NULL; }
static void CopyRange_fxnodelines( struct FXNodeLines **tofxnodeline, struct FXNodeLines *fromfxnodeline, struct FXNodeLines *last, Place p1, Place p2 ){ if(fromfxnodeline==NULL) return; if(p_Less_Than(fromfxnodeline->l.p, p1)){ CopyRange_fxnodelines(tofxnodeline, NextFXNodeLine(fromfxnodeline), fromfxnodeline, p1, p2); return; } if (last!=NULL) if (p_Less_Than(last->l.p, p1)) add_scaled_fxnodeline(tofxnodeline, last, fromfxnodeline, p1, p1); if(p_Greater_Or_Equal(fromfxnodeline->l.p, p2)) { if (last!=NULL) add_scaled_fxnodeline(tofxnodeline, last, fromfxnodeline, p2, p1); return; } add_fxnodeline(tofxnodeline, fromfxnodeline, p1); CopyRange_fxnodelines(tofxnodeline, NextFXNodeLine(fromfxnodeline), fromfxnodeline, p1, p2); }