class MyMass:CMass
{
        F64 radius;
};

class MySpring:CSpring
{

};

CMathODE *ode = NULL;

U0 MyDerivative(CMathODE *ode, F64, COrder2D3 *, COrder2D3 *)
{
        MyMass *tmpm1, *tmpm2;

        tmpm1 = ode->next_mass;
        while (tmpm1 != &ode->next_mass)
        {
                tmpm2 = tmpm1->next;
                while (tmpm2 != &ode->next_mass)
                {
                        tmpm2 = tmpm2->next;
                }
                tmpm1 = tmpm1->next;
        }
}

U0 Init()
{
        ode = ODENew(0, 1e-4, ODEF_HAS_MASSES);
        ode->derive                             = &MyDerivative;
        ode->drag_v2                    = 0.002;
        ode->drag_v3                    = 0.00001;
        ode->acceleration_limit = 5e3;

        QueueInsert(ode, Fs->last_ode);
}

U0 CleanUp()
{
        QueueRemove(ode);
        QueueDel(&ode->next_mass,   TRUE);
        QueueDel(&ode->next_spring, TRUE);
        ODEDel(ode);
}