
MODULE mlm$handle_signal;
*copyc OSD$DEFAULT_PRAGMATS
?? PUSH (LISTEXT := ON) ??
*copyc MLT$ANT_ENTRY
*copyc MLP$SIGN_ON_OS
*copyc OST$GLOBAL_TASK_ID
*copyc PMT$SIGNAL
*copyc OST$STATUS
?? POP ??
?? EJECT ??
*copyc MLH$HANDLE_SIGNAL
?? EJECT ??

  PROCEDURE [XDCL, #GATE] mlp$handle_signal (originator: ost$global_task_id;
    signal: pmt$signal);

    VAR
      handler: mlt$handler,
      info: mlt$signaler_application_info,
      ps: ^mlt$pmt_signal,
      ost,
      status: ost$status,
      sig: mlt$signal;

{
{ get handler for this application
{
    ps := #LOC (signal.contents);
    mlp$get_handler_info_os (ps^.dest, handler, status);
    IF NOT status.normal THEN
      RETURN;
    IFEND;
    IF handler = NIL THEN
{
{ no signal handler - ignore signal
{
      RETURN;
    IFEND;
    info.application_name := ps^.from;
    PUSH sig;
    info.global_task_id := originator;
    sig^.data := ps^.data;
    sig^.direction := ps^.direction;
{    #INLINE ('keypoint', mlc$keypoint_class, 256 * 0, ORD
{(mlc$kp_invoke_handler));
    handler^ (ps^.dest, info, sig, status);
  PROCEND mlp$handle_signal;
MODEND mlm$handle_signal
