<1>/* Graphics Not Rendered in HTML */

#define MAP_HEIGHT      2048
#define MAP_WIDTH       2048

#define TREES_NUM       256

I64 tree_x[TREES_NUM], tree_y[TREES_NUM];

U0 DrawIt(CTask *task, CDC *dc)
{
    I64 i, h, v;

    task->horz_scroll.min = 0;
    task->horz_scroll.max = MAP_WIDTH - task->pix_width;
    task->vert_scroll.min = 0;
    task->vert_scroll.max = MAP_HEIGHT - task->pix_height;
    TaskDerivedValsUpdate(task);

    h = task->horz_scroll.pos;
    v = task->vert_scroll.pos;

    dc->color = BROWN;
    dc->thick = 4;
    GrLine3(dc, 2 - h, 2 - v, 0, MAP_WIDTH - 3 - h, 2 - v, 0);
    GrLine3(dc, 2 - h, MAP_HEIGHT - 3 - v, 0, MAP_WIDTH - 3 - h, MAP_HEIGHT - 3 - v, 0);
    GrLine3(dc, 2 - h, 2 - v, 0, 2 - h, MAP_HEIGHT - 3 - v, 0);
    GrLine3(dc, MAP_WIDTH - 3 - h, 2 - v, 0, MAP_WIDTH - 3 - h, MAP_HEIGHT - 3 - v, 0);

    //Check bounds if you wish better performance.
    for (i = 0; i < TREES_NUM; i++)
        Sprite3(dc, tree_x[i] - h, tree_y[i] - v, 0, <Tree>);
}

U0 Init()
{
    I64 i;

    for (i = 0; i < TREES_NUM; i++)
    {
        tree_x[i] = RandU16 % MAP_WIDTH;
        tree_y[i] = RandU16 % MAP_HEIGHT;
    }
}

U0 ScrollBars()
{
    SettingsPush; //See SettingsPush
    Init;
    Fs->draw_it = &DrawIt;
    WinBorder(ON);
    DocCursor;
    DocClear;
    DocScroll;

    Fs->horz_scroll.pos = 0;
    Fs->vert_scroll.pos = 0;
    CharGet(, FALSE);
    SettingsPop;
    //If you care, you might want to
    //save the original state of the
    //scroll bars.
}

ScrollBars;