Modula-2
Niklaus Wirth, ETH 1978
Modula-2 was developed to be used as the system language for the Lilith workstation. The central concept is the module which may be used to encapsulate a set of related subprograms and data structures, and restrict their visibility from other portions of the program. Each module has a definition part giving the interface, and an implementation part. The language provides limited single-processor concurrency (monitors, coroutines and explicit transfer of control) and hardware access (absolute addresses and interrupts). It uses name equivalence. See Modula, Modula-2*, Modula-2+, Modula-3, Modula-3*, Modula-3pi, Modula-P, Modula-Prolog, Modula/R.
Programming in Modula-2, Niklaus Wirth, Springer-Verlag, 1988.