/* thumbx.c */
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xmu/Atoms.h>
#include <X11/Xaw/Scrollbar.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/Box.h>
#include <stdio.h>

Widget label;
static Arg argsLabel[] = {{XtNlabel, (XtArgVal)"0.50000"}};

void Thumb(Widget w, caddr_t client_data, float percent)
{
    char s[8];
    sprintf(s, "%7.5f", percent);
    XtSetArg(argsLabel[0], XtNlabel, s);
    XtSetValues(label, argsLabel, XtNumber(argsLabel));
}

int main(int argc, char *argv[])
{
    Widget toplevel, bar, box;
    float top = 0.5;
    static XtCallbackRec callback[] = {
        {(XtCallbackProc)Thumb, NULL}, {NULL, NULL},
    };
    static Arg argsBar[] = {
        {XtNorientation, (XtArgVal)XtorientHorizontal},
        {XtNlength, (XtArgVal)300},
        {XtNthumbProc, (XtArgVal)callback},
        {XtNtopOfThumb, (XtArgVal)NULL},
    };
    toplevel = XtInitialize("Scrollbar", "Bar", NULL, 0, &argc, argv);
    box = XtCreateManagedWidget("box", boxWidgetClass, toplevel, NULL, 0);
    bar = XtCreateManagedWidget("bar", scrollbarWidgetClass, box,
                                argsBar, XtNumber(argsBar));
    label = XtCreateManagedWidget("label", labelWidgetClass, box,
                                  argsLabel, XtNumber(argsLabel));
    XtRealizeWidget(toplevel);
    XtSetArg(argsBar[3], XtNtopOfThumb, *(XtArgVal *) &top);
    XtSetValues(bar, argsBar, XtNumber(argsBar));
    XtMainLoop();
    return 0;
}
