PreviousUpNext

15.4.1423  src/lib/x-kit/widget/lib/run-xkit.pkg

## run-xkit.pkg

# Compiled by:
#     src/lib/x-kit/widget/xkit-widget.sublib



# This package provides a higher-level interface to invoking applications.
# Users may set the shell variable "DISPLAY" to specify the display connection.



###                  "There should be no such thing as boring mathematics."
###
###                                           -- E.J. Dijkstra

stipulate
    package ctl =  thread_scheduler_control;                                            # thread_scheduler_control      is from   src/lib/src/lib/thread-kit/src/posix/thread-scheduler-control.pkg
    package wg  =  widget;                                                              # widget                        is from   src/lib/x-kit/widget/basic/widget.pkg
    package xc  =  xclient;                                                             # xclient                       is from   src/lib/x-kit/xclient/xclient.pkg
herein

    package   run_xkit
    : (weak)  Run_Xkit                                                                  # Run_Xkit                      is from   src/lib/x-kit/widget/lib/run-xkit.api
    {
                                                                                        # thread_scheduler_control_g    is from   src/lib/src/lib/thread-kit/src/glue/thread-scheduler-control-g.pkg
        fun make_root_window
                display_or_null                                                         # Allow overriding of the DISPLAY environment variable setting.
            =
            {   my  ( xdisplay,                                                         # Typically from $DISPLAY environment variable.
                      xauthentication:  Null_Or(xc::Xauthentication)                    # Typically from ~/.Xauthority
                    )
                    =
                    xc::get_xdisplay_string_and_xauthentication  display_or_null;

                wg::make_root_window (xdisplay, xauthentication)
                except
                    xclient::XSERVER_CONNECT_ERROR s
                        =
                        {   file::write
                                ( file::stderr,
                                  string::cat
                                    [ "run_xkit: unable to open display \"",   xdisplay,   "\"\n",
                                      "  ",   s,   "\n"
                                    ]
                                );

                            ctl::shut_down_thread_scheduler  threadkit_winix::process::failure;
                        };
              };

        default_time_quantum
            =
            time::from_milliseconds 20;

        fun run_xkit  do_it
            =
            {   ctl::start_up_thread_scheduler'
                    default_time_quantum
                    .{  do_it (make_root_window NULL);  };

                ();
            };

        Options
            =
            { display:                       Null_Or( String ),         # Connect to this display.
              time_quantum_in_milliseconds:  Null_Or( large_int::Int )  # Threadkit time quantum in ms. 
            };

        fun run_xkit' app (options:  Options)
            =
            {   fun run_it ()
                    =
                    app (make_root_window options.display);

                time_quantum
                    =
                    case options.time_quantum_in_milliseconds
                        #
                        THE ms =>  if (ms <= 0)  default_time_quantum; 
                                   else          time::from_milliseconds ms;
                                   fi;

                        NULL   =>  default_time_quantum;
                    esac;


                ctl::start_up_thread_scheduler'
                    time_quantum        
                    run_it;

                ();
            };

    };          #  run_xkit 

end;


Comments and suggestions to: bugs@mythryl.org

PreviousUpNext