#define PTS_NUM 16

U0 BSplineDemo()
{
    CDC     *dc = DCAlias;
    I64      arg1, arg2, i = 0, message_code;
    CD3I32   c[PTS_NUM];

    SettingsPush;
    Fs->win_inhibit = WIG_TASK_DEFAULT - WIF_SELF_FOCUS - WIF_SELF_BORDER;

    DocClear;
    "Sel ctrl points with left mouse.  Right when finished.\n";
    DCFill;
    do
    {
        message_code  = MessageGet(&arg1, &arg2, 1 << MESSAGE_MS_L_UP + 1 << MESSAGE_MS_R_UP);
        if (message_code == MESSAGE_MS_L_UP)
        {
            c[i].x = arg1;
            c[i].y = arg2;
            c[i].z = 0;
            dc->color = GREEN;
            GrCircle(dc, arg1, arg2, 10);
            i++;
        }
    }
    while (i < PTS_NUM && message_code != MESSAGE_MS_R_UP);

    dc->color = RED;
    Gr2BSpline(dc, c, i, TRUE);
    dc->color = BLUE;
    Gr3BSpline(dc, c, i, TRUE);
    DCDel(dc);
    SettingsPop;

    PressAKey;
    DCFill;
}

BSplineDemo;