xaizek / vifm-pdcurses (License: mostly public domain) (since 2019-03-20)
PDCurses 3.4 with vifm-specific patches applied (a couple were upstreamed)
<root> / x11 / sb.c (a34f502b2485ac22d4da053af7c0582f1fcabce6) (3,577B) (mode 100644) [raw]
/* Public Domain Curses */

#include "pdcx11.h"

RCSID("$Id: sb.c,v 1.27 2008/07/14 04:24:52 wmcbrine Exp $")

/*man-start**************************************************************

  Name:                                                          sb

  Synopsis:
        int sb_init(void)
        int sb_set_horz(int total, int viewport, int cur)
        int sb_set_vert(int total, int viewport, int cur)
        int sb_get_horz(int *total, int *viewport, int *cur)
        int sb_get_vert(int *total, int *viewport, int *cur)
        int sb_refresh(void);

  Description:
        These functions manipulate the scrollbar.

  Return Value:
        All functions return OK on success and ERR on error.

  Portability                                X/Open    BSD    SYS V
        sb_init                                 -       -       -
        sb_set_horz                             -       -       -
        sb_set_vert                             -       -       -
        sb_get_horz                             -       -       -
        sb_get_vert                             -       -       -
        sb_refresh                              -       -       -

**man-end****************************************************************/

bool sb_started = FALSE;

/* sb_init() is the sb initialization routine.
   This must be called before initscr(). */

int sb_init(void)
{
    PDC_LOG(("sb_init() - called\n"));

    if (SP)
        return ERR;

    sb_started = TRUE;

    return OK;
}

/* sb_set_horz() - Used to set horizontal scrollbar.

   total = total number of columns
   viewport = size of viewport in columns
   cur = current column in total */

int sb_set_horz(int total, int viewport, int cur)
{
    PDC_LOG(("sb_set_horz() - called: total %d viewport %d cur %d\n",
             total, viewport, cur));

    if (!SP)
        return ERR;

    SP->sb_total_x = total;
    SP->sb_viewport_x = viewport;
    SP->sb_cur_x = cur;

    return OK;
}

/* sb_set_vert() - Used to set vertical scrollbar.

   total = total number of columns on line
   viewport = size of viewport in columns
   cur = current column in total */

int sb_set_vert(int total, int viewport, int cur)
{
    PDC_LOG(("sb_set_vert() - called: total %d viewport %d cur %d\n",
             total, viewport, cur));

    if (!SP)
        return ERR;

    SP->sb_total_y = total;
    SP->sb_viewport_y = viewport;
    SP->sb_cur_y = cur;

    return OK;
}

/* sb_get_horz() - Used to get horizontal scrollbar.

   total = total number of lines
   viewport = size of viewport in lines
   cur = current line in total */

int sb_get_horz(int *total, int *viewport, int *cur)
{
    PDC_LOG(("sb_get_horz() - called\n"));

    if (!SP)
        return ERR;

    if (total)
        *total = SP->sb_total_x;
    if (viewport)
        *viewport = SP->sb_viewport_x;
    if (cur)
        *cur = SP->sb_cur_x;

    return OK;
}

/* sb_get_vert() - Used to get vertical scrollbar.

   total = total number of lines
   viewport = size of viewport in lines
   cur = current line in total */

int sb_get_vert(int *total, int *viewport, int *cur)
{
    PDC_LOG(("sb_get_vert() - called\n"));

    if (!SP)
        return ERR;

    if (total)
        *total = SP->sb_total_y;
    if (viewport)
        *viewport = SP->sb_viewport_y;
    if (cur)
        *cur = SP->sb_cur_y;

    return OK;
}

/* sb_refresh() - Used to draw the scrollbars. */

int sb_refresh(void)
{
    PDC_LOG(("sb_refresh() - called\n"));

    if (!SP)
        return ERR;

    XCursesInstruct(CURSES_REFRESH_SCROLLBAR);

    return OK;
}

Hints

Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"

Clone this repository using HTTP(S):
git clone https://code.reversed.top/user/xaizek/vifm-pdcurses

Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@code.reversed.top/user/xaizek/vifm-pdcurses

You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a pull request:
... clone the repository ...
... make some changes and some commits ...
git push origin master