#define GRID            5

U0 DrawMyMouse(CDC *dc, I64 x, I64 y)
{
        dc->thick = 1;
        dc->flags &= ~(DCF_TRANSFORMATION | DCF_SYMMETRY);
        GrRect(dc, x, y, GRID, GRID);
}

U0 GridDemo()
{
        CGridGlobals old_grid;
        U0 (*old_draw_mouse)(CDC *dc, I64 x, I64 y); //Can't init this type of var.

        MemCopy(&old_grid, &mouse_grid, sizeof(CGridGlobals));
        GridInit;
        mouse_grid.snap = TRUE; //You can set other stuff.
        mouse_grid.x    = GRID;
        mouse_grid.y    = GRID;
        old_draw_mouse = gr.fp_draw_mouse;
        gr.fp_draw_mouse = &DrawMyMouse;
        while (!mouse.lb) 
        {//Left bttn to exit.
                GrPlot(, mouse.pos.x, mouse.pos.y);
                Yield;
        }
        DCFill;
        gr.fp_draw_mouse = old_draw_mouse;
        MemCopy(&mouse_grid, &old_grid, sizeof(CGridGlobals));
}

GridDemo;