gm2-libs/RTint (The GNU Modula-2 Compiler)

#### 4.1.32 gm2-libs/RTint ¶

    DEFINITION MODULE RTint ;

    (* Provides users of the COROUTINES library with the
       ability to create interrupt sources based on
       file descriptors and timeouts.  *)

    FROM SYSTEM IMPORT ADDRESS ;

    TYPE
       DispatchVector = PROCEDURE (CARDINAL, CARDINAL, ADDRESS) ;

    (*
       InitInputVector - returns an interrupt vector which is associated
                         with the file descriptor, fd.
    *)

    PROCEDURE InitInputVector (fd: INTEGER; pri: CARDINAL) : CARDINAL ;

    (*
       InitOutputVector - returns an interrupt vector which is associated
                          with the file descriptor, fd.
    *)

    PROCEDURE InitOutputVector (fd: INTEGER; pri: CARDINAL) : CARDINAL ;

    (*
       InitTimeVector - returns an interrupt vector associated with
                        the relative time.
    *)

    PROCEDURE InitTimeVector (micro, secs: CARDINAL; pri: CARDINAL) : CARDINAL ;

    (*
       ReArmTimeVector - reprimes the vector, vec, to deliver an interrupt
                         at the new relative time.
    *)

    PROCEDURE ReArmTimeVector (vec: CARDINAL; micro, secs: CARDINAL) ;

    (*
       GetTimeVector - assigns, micro, and, secs, with the remaining
                       time before this interrupt will expire.
                       This value is only updated when a Listen
                       occurs.
    *)

    PROCEDURE GetTimeVector (vec: CARDINAL; VAR micro, secs: CARDINAL) ;

    (*
       AttachVector - adds the pointer, p, to be associated with the interrupt
                      vector. It returns the previous value attached to this
                      vector.
    *)

    PROCEDURE AttachVector (vec: CARDINAL; ptr: ADDRESS) : ADDRESS ;

    (*
       IncludeVector - includes, vec, into the dispatcher list of
                       possible interrupt causes.
    *)

    PROCEDURE IncludeVector (vec: CARDINAL) ;

    (*
       ExcludeVector - excludes, vec, from the dispatcher list of
                       possible interrupt causes.
    *)

    PROCEDURE ExcludeVector (vec: CARDINAL) ;

    (*
       Listen - will either block indefinitely (until an interrupt)
                or alteratively will test to see whether any interrupts
                are pending.
                If a pending interrupt was found then, call, is called
                and then this procedure returns.
                It only listens for interrupts > pri.
    *)

    PROCEDURE Listen (untilInterrupt: BOOLEAN;
                      call: DispatchVector;
                      pri: CARDINAL) ;

    (*
       Init - allows the user to force the initialize order.
    *)

    PROCEDURE Init ;

    END RTint.