


## 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.pkgherein
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;


