Listing 2: Partial listing of delta.cpp

DeltaControl::DeltaControl() {
    static deltacontrol d = {0,0,0,0};
    m_Major = d;
    m_Minor = d;
    m_ErrorTerm = 0;
}

void DeltaControl::SetFrom(int Major, int Minor) {
    m_Major.current = Major;
    m_Minor.current = Minor;
}

void DeltaControl::SetTo(int Major, int Minor) {
    SetTo(Major, &m_Major);
    SetTo(Minor, &m_Minor);
    m_ErrorTerm = m_Major.len / 2;
    m_MinorLast = TRUE;
}

BOOL DeltaControl::Next() {
    if (m_MinorLast) m_MinorLast = FALSE;
    else {
        m_ErrorTerm += m_Minor.len;
        if (m_ErrorTerm > m_Major.len && m_Minor.togo) {
            m_Minor.current += m_Minor.delta;
            OnMinorChange(m_Minor.current);
            m_ErrorTerm -= m_Major.len;
            m_Minor.togo--;
            m_MinorLast = TRUE;
            return TRUE;
        }
    }
    if (!m_Major.togo) return FALSE;
    m_Major.current += m_Major.delta;
    m_Major.togo--;
    OnMajorChange(m_Major.current);
    return TRUE;
}

void DeltaControl::SetTo(int In, deltacontrol *Out) {
    int i = In - Out->current;

    Out->delta = (i < 0) ? -1 : 1;
    Out->togo = Out->len = abs(i);
}
— End of Listing —