def main(lsysargv, sysargv):
    sc = 1.0
    xfl.fl_initialize(lsysargv, sysargv, "FormDemo", None, 0)
    ui = create_form_form()
    strng = "%.2f" % sc
    xfl.fl_set_input(ui.pscaleobj, strng)
    xfl.fl_show_form(ui.pform, xfl.FL_PLACE_CENTER | xfl.FL_FREE_SIZE, xfl.FL_FULLBORDER, "Scaling")
    while True:
        oldsc = sc
        pobj = xfl.fl_do_forms()
        if xfl.fl_is_same_object(pobj, ui.pexitobj):
            sys.exit(0)
        elif xfl.fl_is_same_object(pobj, ui.psmallerobj):
            sc = sc * 0.8
        elif xfl.fl_is_same_object(pobj, ui.plargerobj):
            sc = sc / 0.8
        elif xfl.fl_is_same_object(pobj, ui.pscaleobj):
            sc = float(xfl.fl_get_input(ui.pscaleobj))
        if sc < 0.50:
            sc = 0.50
        elif sc > 3:
            sc = 3
        if sc != oldsc:
            xfl.fl_scale_form(ui.pform, sc / oldsc, sc / oldsc)
            xfl.fl_redraw_form(ui.pform)  # to avoid garbage on screen
            strng = "%.2f" % sc
            xfl.fl_set_input(ui.pscaleobj, strng)
def bounds_cb(pobj, data):
    # char buf[ 50 ]

    if not data:
        xmin = float(xfl.fl_get_input(xypui.xmin))
        xmax = float(xfl.fl_get_input(xypui.xmax))

        if xmin <= 0.0:
            xmin = 1.0
            xfl.fl_set_input(xypui.xmin, "1.0")

        if xmax <= 0.0:
            xmax = 10.0
            xfl.fl_set_input(xypui.xmax, "10.0")

        xfl.fl_set_xyplot_xbounds(xypui.xyplot, xmin, xmax)

        xmin, xmax = xfl.fl_get_xyplot_xbounds(xypui.xyplot)
        #sprintf( buf, "%g", xmin );
        buf = str(xmin)
        xfl.fl_set_input(xypui.xmin, buf)
        #sprintf( buf, "%g", xmax );
        buf = str(xmax)
        xfl.fl_set_input(xypui.xmax, buf)

    else:
        ymin = float(xfl.fl_get_input(xypui.ymin))
        ymax = float(xfl.fl_get_input(xypui.ymax))

        if ymin <= 0.0:
            ymin = 1.0
            xfl.fl_set_input(xypui.ymin, "1.0")

        if ymax <= 0.0:
            ymax = 10.0
            xfl.fl_set_input(xypui.ymax, "10.0")

        xfl.fl_set_xyplot_ybounds(xypui.xyplot, ymin, ymax)

        ymin, ymax = xfl.fl_get_xyplot_ybounds(xypui.xyplot)
        #sprintf( buf, "%g", ymin );
        buf = str(ymin)
        xfl.fl_set_input(xypui.ymin, buf)
        #sprintf( buf, "%g", ymax );
        buf = str(ymax)
        xfl.fl_set_input(xypui.ymax, buf)
def create_form_axypform():

    fdui = FD_axyform()

    fdui.axypform = xfl.fl_bgn_form(xfl.FL_NO_BOX, 431, 301)

    xfl.fl_add_box(xfl.FL_UP_BOX, 0, 0, 431, 301, "")

    fdui.xyplot = xfl.fl_add_xyplot(xfl.FL_ACTIVE_XYPLOT, 20, 50, \
            285, 235, "")
    xfl.fl_set_xyplot_xscale(fdui.xyplot, xfl.FL_LOG, 2.0)
    xfl.fl_set_xyplot_yscale(fdui.xyplot, xfl.FL_LOG, 2.0)

    xfl.fl_set_object_boxtype(fdui.xyplot, xfl.FL_DOWN_BOX)
    xfl.fl_set_object_color(fdui.xyplot, xfl.FL_BLACK, xfl.FL_GREEN)
    xfl.fl_set_object_lalign(fdui.xyplot, \
            xfl.fl_to_inside_lalign(xfl.FL_ALIGN_BOTTOM))

    xfl.fl_set_object_callback(fdui.xyplot, xyplot_cb, 0)
    xfl.fl_set_object_gravity(fdui.xyplot, xfl.FL_NorthWest, xfl.FL_SouthEast)

    pobj = xfl.fl_add_checkbutton(xfl.FL_PUSH_BUTTON, 315, 40, 80, 25, \
            "AlwaysReturn")
    xfl.fl_set_object_color(pobj, xfl.FL_COL1, xfl.FL_BLUE)
    xfl.fl_set_object_callback(pobj, alwaysreturn_cb, 0)
    xfl.fl_set_object_gravity(pobj, xfl.FL_NorthEast, xfl.FL_NorthEast)

    pobj = xfl.fl_add_checkbutton(xfl.FL_PUSH_BUTTON, 315, 65, 80, 25, \
            "Interpolate")
    xfl.fl_set_object_color(pobj, xfl.FL_COL1, xfl.FL_BLUE)
    xfl.fl_set_object_callback(pobj, interpolate_cb, 0)
    xfl.fl_set_object_gravity(pobj, xfl.FL_NorthEast, xfl.FL_NorthEast)

    pobj = xfl.fl_add_checkbutton(xfl.FL_PUSH_BUTTON, 315, 90, 85, 25, \
            "InspectOnly")
    xfl.fl_set_object_color(pobj, xfl.FL_COL1, xfl.FL_BLUE)
    xfl.fl_set_object_callback(pobj, inspect_cb, 0)
    xfl.fl_set_object_gravity(pobj, xfl.FL_NorthEast, xfl.FL_NorthEast)

    pobj = xfl.fl_add_checkbutton(xfl.FL_PUSH_BUTTON, 315, 120, 85, 25, \
            "NoTics")
    xfl.fl_set_object_color(pobj, xfl.FL_COL1, xfl.FL_BLUE)
    xfl.fl_set_object_callback(pobj, notic_cb, 0)
    xfl.fl_set_object_gravity(pobj, xfl.FL_NorthEast, xfl.FL_NorthEast)

    fdui.xmin = xfl.fl_add_input(xfl.FL_FLOAT_INPUT, 315, 150, 50, 20,
            " x_min")
    xfl.fl_set_input(fdui.xmin, "1.0")
    xfl.fl_set_object_lalign(fdui.xmin, xfl.FL_ALIGN_RIGHT)
    xfl.fl_set_object_callback(fdui.xmin, bounds_cb, 0)
    xfl.fl_set_object_gravity(fdui.xmin, xfl.FL_NorthEast, xfl.FL_NorthEast)

    fdui.xmax = xfl.fl_add_input(xfl.FL_FLOAT_INPUT, 315, 170, 50, 20,
            " x_max")
    xfl.fl_set_input(fdui.xmax, "10.0")
    xfl.fl_set_object_lalign(fdui.xmax, xfl.FL_ALIGN_RIGHT)
    xfl.fl_set_object_callback(fdui.xmax, bounds_cb, 0)
    xfl.fl_set_object_gravity(fdui.xmax, xfl.FL_NorthEast, xfl.FL_NorthEast)

    fdui.ymin = xfl.fl_add_input(xfl.FL_FLOAT_INPUT, 315, 200, 50, 20,
             " y_min")
    xfl.fl_set_input(fdui.ymin, "1.0")
    xfl.fl_set_object_lalign(fdui.ymin, xfl.FL_ALIGN_RIGHT)
    xfl.fl_set_object_callback(fdui.ymin, bounds_cb, 1)
    xfl.fl_set_object_gravity(fdui.ymin, xfl.FL_NorthEast, xfl.FL_NorthEast)

    fdui.ymax = xfl.fl_add_input(xfl.FL_FLOAT_INPUT, 315, 220, 50, 20,
             " y_max")
    xfl.fl_set_input(fdui.ymax, "10.0")
    xfl.fl_set_object_lalign(fdui.ymax, xfl.FL_ALIGN_RIGHT)
    xfl.fl_set_object_callback(fdui.ymax, bounds_cb, 1)
    xfl.fl_set_object_gravity(fdui.ymax, xfl.FL_NorthEast, xfl.FL_NorthEast)

    fdui.status = xfl.fl_add_box(xfl.FL_BORDER_BOX, 20, 15, 285, 25, "")
    xfl.fl_set_object_boxtype(fdui.status, xfl.FL_DOWN_BOX)
    xfl.fl_set_object_gravity(fdui.status, xfl.FL_NorthWest, xfl.FL_NorthEast)
    xfl.fl_set_object_lalign(fdui.status, xfl.FL_ALIGN_CENTER)

    pobj = xfl.fl_add_button(xfl.FL_NORMAL_BUTTON, 325, 250, 90, 30, "Done")
    xfl.fl_set_object_gravity(pobj, xfl.FL_SouthEast, xfl.FL_SouthEast)

    xfl.fl_end_form()

    return fdui