IMP Core Environment Standard


                 Section 9: Asynchronous Communication

   Two procedures are provided so that a program can communicate
asynchronously with its environment (i.e. out of step with its normal
flow of execution).  Because IMP is essentially a synchronous language,
these facilities are provided as normal procedure calls which the
program can issue when convenient; the asynchronous communication takes
place at the instigation of the external environment.  This normally
takes the form of an explicit request by an interactive terminal user:
many operating systems include standard 'commands' in the form of
special control characters for the purposes of asynchronous
communication with a running program.  The two procedures provided
correspond to two kinds of asynchronous request which are commonly
provided by operating systems: a status-requesting communication to
which programs conventionally respond with a message describing their
current operational state and an attention-requesting communication
which programs conventionally interpret as meaning that an interactive
user wishes to interrupt their processing in favour of some direct
communication.

   Under operating systems which do not provide facilities sophisticated
enough to support the procedures described here, the procedures are
defined to act as if no communication had taken place.


*       routine DOING ( string(255) What )

           The parameter WHAT is a statement by the program of its
        current activity.  For example, a compiler might issue a call to
        DOING at the beginning of each of its major phases.  When a
        status-requesting asynchronous communication is made with the
        program, the string supplied to the most recent call on DOING is
        made available in response.

           Under operating systems which do not support this form of
        asynchronous communication, the procedure DOING is defined to
        have no effect.  Some operating systems provide only a limited
        capability in this respect, a common limitation being on the
        length of the WHAT string.  On these systems, the string
        supplied to DOING is truncated to a number of characters
        acceptable to the system environment.

           An implementation is required to define (DEF0011; DOING
        facility) whether or not this facility is available and if so
        how to invoke it and the form of response to expect.

		     
*       predicate INTERRUPTED

           This predicate is true if an attention-requesting
        communication has occurred since the last call on INTERRUPTED.
        Note that this implies that INTERRUPTED will be true at most
        once for each attention-requesting communication.


           An implementation is required to define (DEF0012; INTERRUPTED
        facility) whether or not this facility is available and if so
        how to invoke it.